【问题标题】:Django ManytoManyfields error `AttributeError: 'ManyRelatedManager' object has no attribute 'dev_id'`Django ManytoManyfields错误`AttributeError:'ManyRelatedManager'对象没有属性'dev_id'`
【发布时间】:2020-10-07 10:23:37
【问题描述】:

我想已经有很多可用的讨论几乎都经过了所有讨论,但仍然面临这个错误。

class Device(models.Model):
    """Storing Device ids """
    platform  = models.CharField(max_length=3, choices=PLATFORM, default = 'ANR')
    dev_id    = models.CharField(max_length = 255, null=True, blank=False)
​
    def __str__(self):
        return str(self.id)

class UserProfile(models.Model):
    user             = models.OneToOneField('user.User', 
                                         on_delete=models.CASCADE,
                                         related_name='profile',
                                         primary_key=True,
                                         unique=True)
    device           = models.ManyToManyField(Device, related_name='devices')
​
    def __str__(self):
        return str(self.user)

错误 1

username = UserProfile.objects.filter(
                    phone_number=user_username).get()
username.device.dev_id
*** AttributeError: 'ManyRelatedManager' object has no attribute 'dev_id'


错误 2 经过一番研究


username.device.values_list('dev_id', flat=True)
<QuerySet []>
​```

There is no device found with this user but there are devices in them for this username
For the reference, I have listed devices

```python
>>> Device.objects.all()
<QuerySet [<Device: 1>]>

错误 3

(Pdb) username.device.all()
<QuerySet []>
 Checked with this Method but not able to list devices

【问题讨论】:

    标签: django django-models django-rest-framework django-views


    【解决方案1】:

    这不起作用,因为deviceManyToMany 关系。 一个用户显然可以关联多个(或没有)设备。

    如果您想访问某个用户的所有设备,请尝试以下操作:

    user.device.all()

    这将为您提供来自RelatedManagerQuerySet。就像普通的QuerySet 一样使用它:

    for d in user.device.all():
      print(d.dev_id)
    

    当然,这在documentation 中有描述。

    【讨论】:

    • 其实你是对的,有no device at all associated with the user我错过的是我独立创建了对象,但没有将device添加到userProfile中,谢谢你的解释和链接文档。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-27
    • 2013-12-25
    • 2013-06-29
    • 2014-01-22
    • 1970-01-01
    • 2021-03-18
    • 2021-11-02
    相关资源
    最近更新 更多