簡體   English   中英

'NoneType' 對象沒有屬性 'add'

[英]'NoneType' object has no attribute 'add'

我有以下用戶對象,

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'

有人可以幫我弄這個嗎?

看起來您正在嘗試使用與django 相關的管理器添加功能

sender_connections.friends.add(receiver)

然而,連接上的friends 屬性是一個ForeignKey 關系而不是ManyToManyField。 這意味着當您調用sender_connections.friends並且連接不存在時,您將獲得 None。

如果將屬性更改為 ManyToManyField,則sender_connections.friends將返回 ManyRelatedManager 並且添加應按預期工作。

作為對wingardtw答案的補充,在 Django 3.0 中,您可以使用 PrimaryKeyRelatedField,而不是使用“add”,您將對查詢集執行更新,如下所示:

Connections.objects.filter(owner=sender).update(friends=receiver)

重要提示:這需要已保存對象。

有關更多信息,請參閱這些鏈接:

https://docs.djangoproject.com/en/3.0/ref/models/relations/#django.db.models.fields.related.RelatedManager.add

https://docs.djangoproject.com/en/3.0/ref/models/querysets/#django.db.models.query.QuerySet.update

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM