Django使用另一个实例更新实例

时间:2017-01-14 13:25:29

标签: django

例如,我有实例a1和a2。

我想将a1更新为与a2相同。 (除了id字段)

以下是我提出的,不确定它是否会起作用,是否有更好的方法。

a2_data = model_to_dict(a2, exclude=['id'])

A.objcects.filter(id=a1.id).update(**a2_data)

3 个答案:

答案 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