首页 > 解决方案 > 一对多关系上的 UpdateOrCreate

问题描述

更新

我正在尝试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在这种情况下,对父母和孩子使用的最佳方法是什么。

标签: pythondjangopython-3.xdjango-models

解决方案


update_or_create当您将默认值中的第二种方法分配removed_price为第一个创建对象之后的字典并在 字典中AtomPresance分配键值时,我得到了错误atom_presance=objremoved_price

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

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)


推荐阅读