django - Django queryset to string 在测试中不返回字符串
问题描述
我正在尝试为此模型编写单元测试:
ADMIN = 1
FULL_USER = 2
LIMITED_USER = 3
class Role(models.Model):
"""
The class stores the model to store the different role which will be used to assign permissions
to the users.
"""
ROLE_CHOICES = (
(ADMIN, 'admin'),
(FULL_USER, 'full_user'),
(LIMITED_USER, 'limited_user')
)
id = models.PositiveSmallIntegerField(choices=ROLE_CHOICES, primary_key=True)
name = models.CharField('name', max_length=30)
def __str__(self):
"""String for representing the Model object."""
if self.name:
return self.name
return self.id
所以我写了这个测试:
from example.models import Role
from rest_framework.test import APITestCase
class RoleModel(APITestCase):
fixtures = ["initial_data/role.json"]
def test_get_admin_role(self):
role = Role.objects.filter(id=1)
self.assertEqual(str(role), 'admin')
但我无法理解为什么它会失败:
AssertionError: '<QuerySet [<Role: admin>]>' != 'admin'
- <QuerySet [<Role: admin>]>
+ admin
我已经阅读了有关如何获取查询集字符串的类似问题,它应该是在__str__
. 但我不知道<QuerySet [<Role: HERE_IS_MY_STRING]>
如果我要求对象的字符串表示,它为什么会被包围。
解决方案
您role
是 s 的QuerySet
(集合)Role
。一个集合可以包含零个、一个或多个Role
s。集合与对象不同。
您可以使用[Django-doc]获取Role
对象:.get(…)
def test_get_admin_role(self):
role = Role.objects.get(id=1)
self.assertEqual(str(role), 'admin')
请注意,一个__str__
对象应该总是返回一个str
ing,而不是一个int
例子。因此,在该__str__
方法中,您应该调用:str(…)
.id
def __str__(self):
"""String for representing the Model object."""
if self.name:
return self.name
return str(self.id)
推荐阅读
- sharepoint-online - Office UI Fabric 主题
- typescript - 这些打字稿功能可以清理或简化吗?
- json - ansible如何从嵌套的json中获取多个值,例如输出
- amazon-web-services - AWS 从存储在 Redshift 上的大型时间序列数据进行预测
- java - 使用 if/else 反应式方法的正确方法
- python - 优化生成和拆分列表的内存使用
- node.js - res.redirect(url) 只能间歇性工作
- app-store - App Store 内部分发无法添加我的组织 ID
- shell - AWK 在平局期间为排名分配分配上限值
- node.js - 为什么我的 Flutter 应用无法连接到我的本地 nodejs 服务器?