具有外键创建的Django模型对象
嗨 假设我有一个简单的模型类,如下所示:具有外键创建的Django模型对象,django,django-models,Django,Django Models,嗨 假设我有一个简单的模型类,如下所示: class TestModel(models.Model): testkey = models.ForeignKey(TestModel2) ... 创建TestModel对象时,我必须向其传递TestModel2对象的实例以创建它: testkey =TestModel2.objects.get(id=...) TestModel.objects.create(testkey=testkey) 我想这会导致对数据库的两个查询,并且我
class TestModel(models.Model):
testkey = models.ForeignKey(TestModel2)
...
创建TestModel对象时,我必须向其传递TestModel2对象的实例以创建它:
testkey =TestModel2.objects.get(id=...)
TestModel.objects.create(testkey=testkey)
我想这会导致对数据库的两个查询,并且我有一个创建对象所需的外键ID列表
是否可以在不首先检索外键对象的情况下创建具有外键的对象?您的目标是:
TestModel.objects.create(testkey__id=1)
在
get\u或\u create
中,它将在get中失败。因此,要使get\u或\u create
工作,以下是解决方案:
TestModel.objects.get_or_create(testkey=TestModel2(id=1))
参考:
在我的例子中,
TestModel.objects.create(testkey\uu id=1)
对我不起作用,所以我不得不放一个下划线,而不是两个下划线
TestModel.objects.create(testkey\u id=1)
(testkey\uuu id=1)将起作用(请注意双下划线)。但很有可能会引发多个对象返回
。如果外键的to\u字段值与“id”不同,该怎么办?@kloddant据我所知,该字段始终被称为«外键名称»id
,而不管到\u字段
或相关模型的主键。可能重复的确认单下划线似乎有效(Django 3.1.7)