鉴于模特
start
我不知道有多少型号可以参考。 ForeignKeys和相关名称可以不同。
现在我将创建下一个参考版本。
<img
src="https://dummyimage.com/800x400/000/fff&text=large-src"
srcset="
https://dummyimage.com/270x400/000/fff&text=small 270w,
https://dummyimage.com/650x400/000/fff&text=medium 650w,
https://dummyimage.com/800x400/000/fff&text=large 800w,
https://dummyimage.com/1600x400/000/fff&text=xlarge 1600w"
sizes="100%"
alt="test">
我需要与class Reference(models.Model):
name = models.TextField()
version = models.PositiveSmallIntegerField()
...
class First(models.Model):
special_reference = models.ForeignKey(Reference, related_name='first_references')
...
class Second(models.Model):
not_special_reference = models.ForeignKey(Reference, related_name='second_references')
...
class Third(models.Model):
very_special_reference = models.ForeignKey(Reference, related_name='third_references')
...
ref_v1 = Reference(name="Main Reference", version=1).save()
first = First(reference_id=ref_v1.id).save()
second = Second(reference_id=ref_v1.id).save()
third = Third(reference_id=ref_v1.id).save()
相关的第一,第二和第三模型的所有创建对象都改变与ref_v2 = Reference(name="Main Reference", version=2).save()
的关系。
我知道,我可以像ref_v1
那样获得ref_v2
到Reference
的所有相关模型。但我无法弄清楚如何动态获取所有相关模型并将ForeignKey的值更改为新模型。
答案 0 :(得分:1)
您显然希望所有模型都与#34; Main Reference&#34;保持联系,但更改版本。将带有ForeignKey的Version
模型添加到Reference
,可以将First
,Second
等保持链接到同一Reference
,然后更新版本。如果您只想做,或者即使您需要更新更多字段,那么只要您更改引用,这似乎比浏览所有相关对象要好。
那就是说,如果你真的想这样做,一旦你有Reference._meta.related_objects
,你可以迭代它们,然后这应该有效:
for related_object in Reference._meta.related_objects:
model = related_object.related_model
field = related_object.field.name
model.objects.filter(**{field: ref_v1}).update(**{field: ref_v2})