Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有外键创建的Django模型对象_Django_Django Models - Fatal编程技术网

具有外键创建的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)