我正在构建一个社交媒体应用程序。
这是我的模型:
from django.db import models
class Person(models.Model):
name = models.CharField(max_length=50)
class Group(models.Model):
admin = models.ManyToManyField(Person, related_name='admin')
members = models.ManyToManyField(Person, blank=True, related_name='members')
def save(self, *args, **kwargs):
self.members.add(self.admin)
super(Group, self).save(*args, **kwargs)
当我尝试创建新组时,由于覆盖save方法,它会引发以下错误..
/admin/social/group/add/ 处的 ValueError
"<Group: Group object (None)>" needs to have a value for field "id" before this many-to-many relationship can be used.
我想要一个admin组的一个也将是members同一组的一个,这就是为什么我覆盖保存方法但它抛出了我上面的错误。
我也尝试使用 Django 来实现这一点,signal如下所示
@receiver(post_save, sender=Group)
def make_admin_also_members(sender, instance, created, **kwargs):
if created:
instance.members.add(instance.admin)
instance.save()
它给我带来了以下错误:
TypeError at /admin/social/group/add/
int() argument must be a string, a bytes-like object or a number, not 'ManyRelatedManager'
然后我尝试像这样实现它:
@receiver(post_save, sender=Group)
def make_admin_also_members(sender, instance, created, **kwargs):
if created:
instance.members.add(str(instance.admin))
instance.save()
它向我抛出以下错误:
ValueError at /admin/social/group/add/
invalid literal for int() with base 10: 'social.Person.None'
在我得到上述错误之后,我尝试像下面这样实现这一点
@receiver(post_save, sender=Group)
def make_admin_also_members(sender, instance, created, **kwargs):
if created:
instance.members.add((member.id for member in instance.admin))
instance.save()
我被这个错误伤害了:
TypeError at /admin/social/group/add/
'ManyRelatedManager' object is not iterable
如果我在下面尝试这样:
@receiver(post_save, sender=Group)
def make_admin_also_members(sender, instance, created, **kwargs):
if created:
instance.members.add(*instance.admin.all())
instance.save()
它不会引发任何错误,但问题是,它不会保存该members字段。
谁能帮我实现这一目标?