Django ManyToManyField在管理员中保存时出错?

时间:2012-07-06 07:33:54

标签: python django django-models django-admin

我的代码出了什么问题?

class Group(ImageModel):
     title = models.CharField(verbose_name = "Title", max_length=7)
     photos = models.ManyToManyField('Photo', related_name='+', 
                                             verbose_name=_('Photo'),
                                             null=True, blank=True)

    .....


     pid = Photo.objects.get(image = str_path)

     gid= Group.objects.get(id = self.id)       

     self.save_photos(gid, pid)

    ....


    def save_photos(self, gid, pid):
       group_photo = GroupPhotos(groupupload=gid.id,
                                        photo=pid.id
                                        )
       group_photo.save()

和我的GroupPhotos模型是:

class GroupPhotos(models.Model):
    groupupload = models.ForeignKey('Group')
    photo = models.ForeignKey('Photo')
    class Meta:
        db_table = u'group_photos'

当我想从管理面板保存它时,我得到的价值错误是这样的:

Cannot assign "38": "GroupPhotos.groupupload" must be a "Group" instance.

group_photo = GroupPhotos(groupupload=gid, photo=pid} defination它正在工作,但GroupPhotos表(group_photos)没有任何变化。打印这个print pid.id,' >>> ',gid.id我正在建立真正的关系...

更新

我从早上开始工作,但没有进展......我也试过这个但没有改变:

pid = Photo.objects.get(image = str_path)

ger = Group.objects.get(id = self.id)
        ger.title = self.title       
        ger.save()

        ger.photos.add(pid)

2 个答案:

答案 0 :(得分:4)

错误在于:

group_photo = GroupPhotos(groupupload=gid.id, photo=pid.id)

groupuploadphoto的参数应分别是GroupPhoto的实例。请尝试以下方法:

group_photo = GroupPhotos(groupupload=gid, photo=pid)

换句话说,在创建对象时,您需要传递期望类型的参数而不是整数(可能是所需对象的主键键,但也可能不是,这就是为什么需要传递一个正确类型的对象)。

答案 1 :(得分:0)

我已经解决了将通过选项添加到我的manytomanyfield中的问题:

photos = models.ManyToManyField('Photo', related_name='+', 
                                     verbose_name=_('Photo'),
                                     null=True, blank=True, through=GroupPhotos)

有关ManyToManyField.through here的一些信息:

  

Django将自动生成一个表来管理多对多   关系。但是,如果要手动指定   中间表,可以使用through选项指定   Django模型,代表您想要的中间表   使用

     

此选项最常见的用途是,您希望将额外数据与多对多关系相关联。