Объект 'NoneType' не имеет атрибута 'add' - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть следующий объект User,

class User(AbstractBaseUser, PermissionsMixin, Base):
    username = models.CharField(
        db_index=True, 
        null=False, 
        unique=True,  
        max_length=255,
    )
    mobile = PhoneNumberField(
        db_index=True,  
        null=False,  
        unique=True,
    )
    is_staff = models.BooleanField(default=False)
    is_superuser = models.BooleanField(default=False)
    is_active = models.BooleanField(default=False)

И у меня есть следующий класс для управления соединениями,

class Connections(Base):
    owner = models.OneToOneField(
        User, 
        on_delete=models.CASCADE,
        null=True,
    )
    friends = models.ForeignKey(
        User, 
        on_delete=models.CASCADE,
        related_name='friend_set',
        null=True, 
        blank=True,
    )
    followers = models.ForeignKey(
        User, 
        on_delete=models.CASCADE,
        related_name='follower_set',
        null=True, 
        blank=True,
    )
    followings = models.ForeignKey(
        User, 
        on_delete=models.CASCADE,
        related_name='following_set',
        null=True, 
        blank=True,
    )

Когда я пытаюсь добавить друга,

sender = User.objects.get(
    id=kwargs.get('sender_id')
)
receiver = User.objects.get(
    id=kwargs.get('receiver_id')
)
sender_connections, created =(
    Connections.objects.get_or_create(owner=sender)
)
sender_connections.friends.add(receiver)

Я получаю следующую ошибку:

'NoneType' object has no attribute 'add'

Может ли кто-нибудь помочь мне с этим?

1 Ответ

0 голосов
/ 30 ноября 2018

Похоже, что вы пытаетесь использовать функцию добавления менеджера, связанного с django

sender_connections.friends.add(receiver)

Однако атрибут friends в соединениях - это отношение ForeignKey, а неManyToManyField.Это означает, что когда вы вызываете sender_connections.friends, а соединение не существует, вы получите None.

Если вы измените атрибут на ManyToManyField, sender_connections.friends вернет ManyRelatedManager, и добавление должно работать какожидается.

...