我的代码出了什么问题?
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)
答案 0 :(得分:4)
错误在于:
group_photo = GroupPhotos(groupupload=gid.id, photo=pid.id)
groupupload
和photo
的参数应分别是Group
和Photo
的实例。请尝试以下方法:
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模型,代表您想要的中间表 使用
此选项最常见的用途是,您希望将额外数据与多对多关系相关联。