2

我的代码有什么问题?

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) 定义它正在工作,但 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)
4

2 回答 2

4

错误在这里:

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

groupupload和的参数photo应该分别是Group和的实例Photo。尝试以下操作:

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

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

于 2012-07-06T07:36:09.997 回答
0

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

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

关于 ManyToManyField.through的一些信息:

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

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

于 2012-07-06T13:57:25.670 回答