Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.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中的foreignkeys复制数据库的一部分_Django - Fatal编程技术网

用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,而不用我查看数据库?这应该对我也有用,不是吗?