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)
您可以只使用 ForeignKey 对象下面的 id 字段:
UserLocale.objects.create(user=user_instance, locale_id=locale)
Run Code Online (Sandbox Code Playgroud)
(我认为您最后一行中对 Locale 的引用实际上应该是 UserLocale)。