我有一个要在其中保存新实例(行)的模型。我有ForeignKey的主键,但是我没有对象本身(假设它来自某个地方)。有没有保存原始SQL且无需获取实例的方法?

这是模型:

class UserLocale(models.Model):

    user = models.ForeignKey(KingUser)
    locale = models.ForeignKey(Locale)


现在,假设我具有区域设置主键('en_US'),但是我没有对象本身。我要保存的内容是这样的:

def save_locale(user_instance, locale_name):
    locale = Locale.objects.get(pk=locale_name)
    UserLocale.objects.create(user=user_instance, locale=locale)


我知道我可以使用原始SQL一步完成它,但是我想知道是否可以在Django查询模型中做到这一点。

编辑:

是的,UserLocale是一个M2M中间表。我知道最好创建一个ManyToMany字段,但这是旧代码。

这是我的SQL尝试(没有测试,因为我不在代码中,所以我要手工写):

def save_raw_sql(user_instance, locale_name):

    query = """
            INSERT INTO
                project_userlocale (user_id, locale_id)
            values (%s, %s)
            """

     UserLocale.objects.raw(query, [user_instance.id, locale_name])

最佳答案

您可以只使用ForeignKey对象下面的id字段:

UserLocale.objects.create(user=user_instance, locale_id=locale)


(我认为最后一行中对Locale的引用实际上应该是UserLocale)。

10-07 18:24