用django中的foreignkeys复制数据库的一部分
我每年都有一些物品,我想把其中一件复制到新的一年,并附上合适的外文钥匙。下面的模型实现链接到许多时刻,当我制作一个新副本时,我想“保持”新时刻和新实现之间的联系 根据我在互联网上的发现,我正在编写以下代码:用django中的foreignkeys复制数据库的一部分,django,Django,我每年都有一些物品,我想把其中一件复制到新的一年,并附上合适的外文钥匙。下面的模型实现链接到许多时刻,当我制作一个新副本时,我想“保持”新时刻和新实现之间的联系 根据我在互联网上的发现,我正在编写以下代码: realis_lista = Realisering.objects.filter(year=thisyear).all() for obj in realis_lista: new_obj = obj moment = Moment.objects.filter(reali
realis_lista = Realisering.objects.filter(year=thisyear).all()
for obj in realis_lista:
new_obj = obj
moment = Moment.objects.filter(realisering__pk=obj.pk).all()
new_obj.pk = None
new_obj.year = nextyear
new_obj.save()
if moment:
for mom in moment:
new_mom = mom
new_mom.pk = None
new_mom.realisation = ??new_obj??
最后一排应该是什么?我需要找到新的_obj保存在哪里(它的pk),但我唯一的想法是使用
n_obj =
Realisering.objects.filter(year=nextyear).filter(period=obj.period)....
new_mom.realisation=n_obj
但一定有更好的办法
也许有更好的方法来制作这个副本 据我所知:
- 您的力矩模型具有实现模型的外键
- 您将从今年的
中获取所有实现,并为每个实现创建一个副本,并在下一年创建一个新的
nextyear
- 对于每一次变现,您都会制作一份与之相关的时刻副本(如有),并且您希望将新年变现副本分配给该时刻副本
new_obj
的位置,您已经在代码中找到了它
我想你应该试试
for obj in Realisering.objects.filter(year=thisyear).all():
# .first() will return None if it doesn't find it
moment = Moment.objects.filter(realisering__pk=obj.pk).first()
obj.year = nextyear
# The my_object.pk = None and my_object.save() combinaison will generate a new instance
obj.pk = None
obj.save()
# obj is now the copy of the object
if moment:
moment.pk = None
# We assign the Realisation copy to the Moment copy
moment.realisation = obj
moment.save()
请注意,如果您的模型使用继承、多个字段或一个字段,则必须采取额外的预防措施:谢谢,但我想我已经测试过了。我使用了moment.realization.pk=obj.pk,但obj.pk没有。你的意思是,当我保存obj时,它会被分配一个pk,而不用我查看数据库?这应该对我也有用,不是吗?