首页 > 解决方案 > Django ManytoManyfields错误`AttributeError:'ManyRelatedManager'对象没有属性'dev_id'`

问题描述

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

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

标签: djangodjango-modelsdjango-rest-frameworkdjango-views

解决方案


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

如果要从用户访问所有设备,请尝试以下操作:

user.device.all()

这会给你一个QuerySetfrom a RelatedManager。像普通一样使用它QuerySet

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

当然,这在文档中有所描述。


推荐阅读