如何在不检索外部对象实例的情况下保存 ForeignKey?

Piv*_*iva 2 python django django-models

我有一个模型,我想在其中保存一个新实例(行)。我有 ForeignKey 的主键,但我没有对象本身(假设它来自某个地方)。有没有办法在没有原始 SQL 的情况下保存它,而不必获取实例?

这是模型:

class UserLocale(models.Model):

    user = models.ForeignKey(KingUser)
    locale = models.ForeignKey(Locale)
Run Code Online (Sandbox Code Playgroud)

现在假设我有语言环境主键 ('en_US') 但我没有对象本身。我正在做的是保存它是这样的:

def save_locale(user_instance, locale_name):
    locale = Locale.objects.get(pk=locale_name)
    UserLocale.objects.create(user=user_instance, locale=locale)
Run Code Online (Sandbox Code Playgroud)

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

编辑:

是的,UserLocale 是一个 M2M 中间表。我知道创建一个多对多字段会更好,但它是遗留代码。

这是我的 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])
Run Code Online (Sandbox Code Playgroud)

Dan*_*man 5

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

UserLocale.objects.create(user=user_instance, locale_id=locale)
Run Code Online (Sandbox Code Playgroud)

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