Django ManytoManyfields 错误`AttributeError:'ManyRelatedManager'对象没有属性'dev_id'`

Pra*_*pta 2 django django-models django-views django-rest-framework

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

\n
class Device(models.Model):\n    """Storing Device ids """\n    platform  = models.CharField(max_length=3, choices=PLATFORM, default = \'ANR\')\n    dev_id    = models.CharField(max_length = 255, null=True, blank=False)\n\xe2\x80\x8b\n    def __str__(self):\n        return str(self.id)\n\n
Run Code Online (Sandbox Code Playgroud)\n
class UserProfile(models.Model):\n    user             = models.OneToOneField(\'user.User\', \n                                         on_delete=models.CASCADE,\n                                         related_name=\'profile\',\n                                         primary_key=True,\n                                         unique=True)\n    device           = models.ManyToManyField(Device, related_name=\'devices\')\n\xe2\x80\x8b\n    def __str__(self):\n        return str(self.user)\n
Run Code Online (Sandbox Code Playgroud)\n
\n

错误1

\n
\n
username = UserProfile.objects.filter(\n                    phone_number=user_username).get()\nusername.device.dev_id\n*** AttributeError: \'ManyRelatedManager\' object has no attribute \'dev_id\'\n\n\n
Run Code Online (Sandbox Code Playgroud)\n
\n

错误 2\n经过一番研究

\n
\n
\nusername.device.values_list(\'dev_id\', flat=True)\n<QuerySet []>\n\xe2\x80\x8b```\n\nThere is no device found with this user but there are devices in them for this username\nFor the reference, I have listed devices\n\n```python\n>>> Device.objects.all()\n<QuerySet [<Device: 1>]>\n
Run Code Online (Sandbox Code Playgroud)\n
\n

错误3

\n
\n
(Pdb) username.device.all()\n<QuerySet []>\n Checked with this Method but not able to list devices\n\n
Run Code Online (Sandbox Code Playgroud)\n

Haf*_*uss 14

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

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

user.device.all()

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

for d in user.device.all():
  print(d.dev_id)
Run Code Online (Sandbox Code Playgroud)

当然,文档中对此进行了描述。