Django Orm的新手,我需要指导:
我想在表'Table1'和PK'table1Primary'中插入5条记录
然后将相同数量的记录插入到另一个表'Table2'中,其中表1 PK'table1Primary'作为外键
示例:表1主键
表2外键
[我宁愿使用bulk_create或任何其他优化的方法,而不是编写单独的插入语句]
代码行不通,我想是因为这一行
eft_fulfillment_uid = ef,第二秒我得到5 * 5插入
for i in range(5):
ef = Fulfillment.objects.create(
fullfillment_uid=generateid(),
...
...
)
ef.save()
for i in range(5):
por = OutReq.objects.create(
out_req_uid=random.randint(500, 1000000000),
fulfillment_uid=ef,
...
...
)
por.save()
答案 0 :(得分:0)
如果要为每个OutReq
对象保存一个新的Fulfillment
对象,请在同一循环中进行操作。否则,您将仅使用ef
设置为的最后一个值。
for i in range(5):
ef = Fulfillment.objects.create(
fullfillment_uid=generateid(),
...
...
)
por = OutReq.objects.create(
out_req_uid=random.randint(500, 1000000000),
fulfillment_uid=ef.fullfillment_uid,
...
...
)
此外,Django使用id
作为默认主键。您应该有一个很好的理由来更改它。所以,最好做
for i in range(5):
ef = Fulfillment.objects.create(
...
...
)
por = OutReq.objects.create(
out_req_uid=random.randint(500, 1000000000),
fulfillment_uid=ef.id,
...
...
)
然后Fulfillment
将自动获得一个名为id
的新主键(别名为pk
),您可以在第二个对象中将其用作引用。
此外,您可以在模型定义中声明OutReq.fullfilment
是Fullfillment
的外键,然后像这样简单地分配对象
for i in range(5):
ef = Fulfillment.objects.create(
...
...
)
por = OutReq.objects.create(
out_req_uid=random.randint(500, 1000000000),
fulfillment=ef,
...
...
)
然后Django将自动创建一个字段OutReq.fullfilment_id
并将主键存储到那里的Fulfillment
实例中。然后,您可以像por.fulfillment.id
等一样访问它。
Dango Models如果正确使用它们会使事情变得容易得多。
答案 1 :(得分:0)
我假设每个实现都有5个请求。
# i assumed you want this is what you intented
for i in range(5):
ef = Fulfillment.objects.create(
fullfillment_uid=generateid(),
)
for j in range(5):
por = OutReq.objects.create(
out_req_uid=random.randint(500, 1000000000),
fulfillment_uid=ef,
)
# this is the bulk_create version of the above
fulfillment_list = []
fulfillment_ids = []
for i in range(5):
ef_id = generateid()
ef = Fulfillment( # note this doesn't create new instance of Fulfillment
fullfillment_uid=ef_id,
)
fulfillment_list.append(ef)
fulfillment_ids.append(ef_id)
Fulfillment.objects.bulk_create(fulfillment_list)
req_list = []
for ef in Fulfillment.objects.filter(fullfillment_uid__in=fulfillment_ids):
for j in range(5):
por = OutReq(
out_req_uid=random.randint(500, 1000000000),
fulfillment_uid=ef,
)
req_list.append(por)
OutReq.objects.bulk_create(req_list)