Python Django ManyToManyField在管理员中保存时出错?
我的代码有什么问题Python Django ManyToManyField在管理员中保存时出错?,python,django,django-models,django-admin,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'),
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()
我的群照模型是:
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.
使用
groupphoto=GroupPhotos(groupupupload=gid,photo=pid
)定义,它正在工作,但GroupPhotos表(GroupPhotos)中没有任何更改。打印这个打印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)
错误在这里:
group_photo = GroupPhotos(groupupload=gid.id, photo=pid.id)
groupupload
和photo
的参数应该分别是Group
和photo
的实例。请尝试以下操作:
group_photo = GroupPhotos(groupupload=gid, photo=pid)
换句话说,创建对象时,需要传递预期类型的参数,而不是整数(可能是所需对象的主键,但也可能不是,这就是为什么需要传递正确类型的对象)。错误如下:
group_photo = GroupPhotos(groupupload=gid.id, photo=pid.id)
groupupload
和photo
的参数应该分别是Group
和photo
的实例。请尝试以下操作:
group_photo = GroupPhotos(groupupload=gid, photo=pid)
换句话说,创建对象时,需要传递预期类型的参数,而不是整数(可能是所需对象的主键,但也可能不是,这就是为什么需要传递正确类型的对象).我通过在我的manytomanyfield中添加选项解决了我的问题:
photos = models.ManyToManyField('Photo', related_name='+',
verbose_name=_('Photo'),
null=True, blank=True, through=GroupPhotos)
有关ManyToManyField.To的一些信息:
Django将自动生成一个表来管理多对多
关系。但是,如果要手动指定
中间表,可以使用“通过”选项指定
Django模型,表示要创建的中间表
使用
此选项最常见的用途是当您希望将额外数据与多对多关系关联时
我已通过向我的manytomanyfield添加选项解决了我的问题:
photos = models.ManyToManyField('Photo', related_name='+',
verbose_name=_('Photo'),
null=True, blank=True, through=GroupPhotos)
有关ManyToManyField.To的一些信息:
Django将自动生成一个表来管理多对多
关系。但是,如果要手动指定
中间表,可以使用“通过”选项指定
Django模型,表示要创建的中间表
使用
此选项最常见的用途是当您希望将额外数据与多对多关系关联时
谢谢你@Simeon Visser。我已经尝试过了,但没有更改GroupPhotos表(group_photos)中的任何内容。当我尝试在“管理”面板中添加此关系时,将其插入GroupPhotos中没有错误。您是否更改了GroupPhotos表中的任何内容?除了我上面的答案,我在你的代码中没有看到需要更改的内容。不,我在群照中没有更改任何内容。它是从组(ManyToManyField关系)自动创建的,我用inspecdb获得它,然后添加到我的模型中,只更改了模型名称…使用
Group\u photo=GroupPhotos(groupupupload=gid,photo=pid)
defination它正在工作,但GroupPhotos表(Group\u photos)中没有任何更改。打印这个打印pid.id,'>>>',gid.id
我得到了真实的关系…谢谢@Simeon Visser。我已经尝试过了,但没有更改GroupPhotos表(group_photos)中的任何内容。当我尝试在“管理”面板中添加此关系时,将其插入GroupPhotos中没有错误。您是否更改了GroupPhotos表中的任何内容?除了我上面的答案,我在你的代码中没有看到需要更改的内容。不,我在群照中没有更改任何内容。它是从组(ManyToManyField关系)自动创建的,我用inspecdb获得它,然后添加到我的模型中,只更改了模型名称…使用Group\u photo=GroupPhotos(groupupupload=gid,photo=pid)
defination它正在工作,但GroupPhotos表(Group\u photos)中没有任何更改。打印此print pid.id,'>>>',gid.id
我正在获得真实的关系…仍然没有解决问题…“它正在工作,但GroupPhotos表(group_photos)中没有任何更改”-你的意思是它没有保存数据吗?是的@Simon it没有保存任何关系数据…仍然没有解决问题。。。“它正在工作,但GroupPhotos表(group_photos)中没有任何更改”-你的意思是它没有保存数据吗?是@Simon它没有保存任何关系数据。。。