Я создаю приложения для социальных сетей.
Это мои модели:
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
метод ..
ValueError в / admin / social / group / add /
"<Group: Group object (None)>" needs to have a value for field "id" before this many-to-many relationship can be used.
Я хочу, чтобы admin
группы также было members
этой же группы,вот почему я переопределяю метод save, но он выдает мне ошибки, выше.
Также я пытался добиться этого с помощью 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
.
Может кто-нибудь помочь мне добиться этого?