Django queryset to string 不 return 测试中的字符串
Django queryset to string does not return the string in a test
我正在尝试为此模型编写单元测试:
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
是 QuerySet
(集合)的 Role
。集合可以包含零个、一个或多个 Role
。集合与对象不同。
您可以通过 .get(…)
[Django-doc]:
获得一个 Role
对象
def test_get_admin_role(self):
role = Role.objects.<b>get(</b>id=1<b>)</b>
self.assertEqual(str(role), 'admin')
请注意,__str__
对象应该总是 return 一个 str
ing,而不是 int
。在 __str__
方法中,您应该在 .id
:
上调用 str(…)
def __str__(self):
"""String for representing the Model object."""
if self.name:
return self.name
return <b>str(</b>self.id<b>)</b>
我正在尝试为此模型编写单元测试:
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
是 QuerySet
(集合)的 Role
。集合可以包含零个、一个或多个 Role
。集合与对象不同。
您可以通过 .get(…)
[Django-doc]:
Role
对象
def test_get_admin_role(self):
role = Role.objects.<b>get(</b>id=1<b>)</b>
self.assertEqual(str(role), 'admin')
请注意,__str__
对象应该总是 return 一个 str
ing,而不是 int
。在 __str__
方法中,您应该在 .id
:
str(…)
def __str__(self):
"""String for representing the Model object."""
if self.name:
return self.name
return <b>str(</b>self.id<b>)</b>