具有外键创建的Django模型对象

dra*_*oon 47 django django-models

嗨假设我有一个像这样的简单模型类:

class TestModel(models.Model):
    testkey = models.ForeignKey(TestModel2)
    ...
Run Code Online (Sandbox Code Playgroud)

当我创建一个TestModel对象时,我必须传递一个TestModel2对象的实例来创建它:

testkey =TestModel2.objects.get(id=...)
TestModel.objects.create(testkey=testkey)
Run Code Online (Sandbox Code Playgroud)

这导致我想要对数据库进行2次查询,并且我有一个创建对象所需的外键ID列表.

是否可以在不初始检索外键对象的情况下使用外键创建对象?

sne*_*eeu 72

你所追求的是:

TestModel.objects.create(testkey_id=1)
Run Code Online (Sandbox Code Playgroud)

  • @Tomasz不,这将无法工作,但`TestModel2.objects.get(testkey__id = 1)`和`TestModel2.objects.get_or_create(testkey__id = 1)`将起作用(注意双下划线).虽然这些会引发`MultipleObjectsReturned`,但是很有可能. (10认同)
  • @dragon:我相信 TestModel2.objects.get(testkey_id=1) 也不起作用。 (2认同)
  • @kloddant 据我所知,该字段始终称为“外键名称”_id,无论“to_field”或相关模型的主键如何。 (2认同)

Zoh*_*Ali 13

在我的情况下TestModel.objects.create(testkey__id=1)对我不起作用,所以我不得不放一个下划线而不是两个,例如

TestModel.objects.create(testkey_id=1)


Dhr*_*min 8

get_or_create它会失败。因此,要get_or_create在下面进行工作是解决方案:

TestModel.objects.get_or_create(testkey=TestModel2(id=1))
Run Code Online (Sandbox Code Playgroud)

参考:https : //code.djangoproject.com/ticket/13915