更新多对多映射django的id。

问题描述 投票:0回答:1

我有两个模型,有很多对很多的映射,现在,我有两个不同的对象Child_details:child_obj1和child_obj2。

class Child_details(models.Model):
   name = models.CharField(max_length=200, default="")
   gender = models.CharField(max_length=2, choices=GENDER_CHOICES)
   dob = models.DateField(null=True, blank=True)
   images_history = models.ManyToManyField(Image_history, blank=True)

class Image_history(models.Model):
    image_type = models.CharField(max_length=100, blank=True, null=True, choices=PAGE_TYPES)
    image_link = models.CharField(max_length=100, blank=True, null=True)

现在,我有两个不同的child_details对象: child_obj1和child_obj2。由于child_obj2是child_obj1的重复,我想删除这个对象,在删除之前,我必须将child_obj2的所有image_history引用到child_obj1。

for image in child_obj2.image_history.all():
    image.child_details_id=child_obj1.id
    #but, I can't do the above one because there is no child_details_id in image_history model

Django创建了第三个表,里面有child_details_id, image_history_id.我想在django创建的第三个表里修改child_details_id,以便进行许多到许多的映射,这样做对吗?

python django-models manytomanyfield
1个回答
0
投票

我明白了。基本上我所做的是迭代child_obj2的images_history,并在child_obj1的images_history中做条目。

for child_image_history in child_obj2.images_history.all():
    image_history = Image_history(image_type=child_image_history.image_type, image_name=child_image_history.image_name)
    image_history.save()
    child_obj1.images_history.add(image_history)
    child_image_history.delete()

并删除了child_obj2之前的条目,这是不需要的。

© www.soinside.com 2019 - 2024. All rights reserved.