例如,我有实例a1和a2。
我想将a1更新为与a2相同。 (除了id字段)
以下是我提出的,不确定它是否会起作用,是否有更好的方法。
a2_data = model_to_dict(a2, exclude=['id'])
A.objcects.filter(id=a1.id).update(**a2_data)
答案 0 :(得分:1)
您建议的解决方案有效:
from django.forms.models import model_to_dict
a2_data = model_to_dict(a2, exclude=['id'])
A.objects.filter(id=a1.id).update(**a2_data)
如果你想避免更新语句,你可以改为:
for key, value in a2_data.items():
setattr(a1, key, value)
a1.save()
但是,如果您的任何字段是ForeignKeys,则此方法将不起作用,而第一种方法会正确处理它们。
答案 1 :(得分:0)
没有像&a;实例a1和a2'相同的东西。它们可以是相同的,至少它们必须具有不同的ID。
因此在查询中无法进行此类更新。您必须过滤应更新的记录,迭代它们并进行所需的更改。
答案 2 :(得分:0)
我不确定它是否100%有效,但我相信值得尝试:
a2 = A.objects.get(pk=a2_pk)
a1 = A.objects.get(pk=a1_pk)
a2.pk = a1.pk
a2.save() # maybe force_update=True should be set here too