django - 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
解决方案
这是行不通的,因为device
是ManyToMany
关系。一个用户显然可以关联多个(或没有)设备。
如果要从用户访问所有设备,请尝试以下操作:
user.device.all()
这会给你一个QuerySet
from a RelatedManager
。像普通一样使用它QuerySet
:
for d in user.device.all():
print(d.dev_id)
当然,这在文档中有所描述。
推荐阅读
- python - PyInstaller EXE 变回原来的图标
- python - 在一个图 Python 上按标题字符串中的相似性绘制数据框列
- python - WebDriverException:消息:未知错误:Chrome 无法启动:通过 VPS 上的 Python 使用 ChromeDriver Chrome 和 Selenium 异常退出
- angular - Angular-cli 安装但不启动新项目:包安装失败
- mysql - 为什么 MySQL 会返回 NULL 但字段中有值?
- c# - 使用 VB.NET API 在 MSSQL 中显示存储在 varbinary 字段中的图像的最佳或可行方法
- sql-server - SQL 查询需要 20 分钟才能完成,并且只包含 1300 行
- join - 在 Neo4j 3.2.15 和 cypher-3.1 中以单个返回值连接来自 2 个节点的密钥
- r - 评估字符串:s = "start=70 end=200 step=5"
- javascript - 使用节点和角度应用程序在页面刷新时获取 404 页面