在一对多关系上更新或创建

时间:2020-02-15 08:12:26

标签: python django python-3.x django-models

已更新

我正在尝试在父表上应用update_or_create方法。然后在子表上。但是,当update_or_create方法在子级上运行时,会返回此错误...

禁止

save()以防止由于未保存的相关对象而导致数据丢失 “ atom_presance”。

看起来孩子不认识父母的update_or_create,也无法获取Foreign_key。

for i, fee in enumerate(fees):
   for j, item in enumerate(fee):
      projects = AtomPresance() #parent
      advertisements = Advertisements() #child

      project_name = {'project_name': item["title"]}

      kind = item["kind"]
      removed_price = {'removed_price': item[kind], "atom_presance":projects} #sending FOREIGN_KEY also

      obj, created = AtomPresance.objects.update_or_create(project_name=item["title"], defaults=project_name)
      obj, created = Advertisements.objects.update_or_create(saved_date=date, defaults=removed_price)

在这种情况下,对父母和孩子使用update_or_create的最佳方法是什么。

1 个答案:

答案 0 :(得分:1)

当您使用update_or_create作为默认方法的第二种方法时,我出错了,将removed_price分配为第一次创建后的字典 AtomPresance个对象,并在atom_presance=obj词典的removed_price中分配键值

您必须在创建子模型时传递parentmodel的引用,并用代码替换下面的代码

for i, fee in enumerate(fees):
   for j, item in enumerate(fee):
      project_name = {'project_name': item["title"]}

      kind = item["kind"]

      obj, created = AtomPresance.objects.update_or_create(project_name=item["title"], defaults=project_name)

      removed_price = {'removed_price': item[kind], "atom_presance":obj} #here change you need to assign the created obj that we create in above line 

      obj, created = Advertisements.objects.update_or_create(saved_date=date, defaults=removed_price)

相关问题