如何解决获取 getattr():运行 django 测试时属性名称必须是字符串错误
我是 Django 的新手。我正在构建一个应用,需要对用户对各种用途和功能的访问进行大量控制。
为此,我创建了一个名为“UserType”的模型,其中包含一些用户组作为对象,即扫描仪、守望者、枪手和管理员。
另一个模型,AssignedType,将用户分配给一个或多个 UserType。它有两个字段。 'user' 与 User 模型相关,'user_type' 与 UserType 模型相关。
文件“rights.py”控制用户访问。
一切正常,直到我尝试在 tests.py 中进行测试
以下是我来自tests.py的代码
{'name': 'jack','date': 'Jan-06-2021','age': '24'}
然而,这是抛出以下错误:
from django.test import TestCase,Client
from django.urls import reverse
from DataMech.models import User,UserType,AssignedType
class TestScanner(TestCase):
def setUp(self):
scanner1 = User.objects.create(username='scanner1',password='abc')
scanner2 = User.objects.create(username='scanner2',password='abc')
overwatch1 = User.objects.create(username='overwatch1',password='abc')
overwatch2 = User.objects.create(username='overwatch2',password='abc')
lancer1 = User.objects.create(username='lancer1',password='abc')
lancer2 = User.objects.create(username='lancer2',password='abc')
lancer3 = User.objects.create(username='lancer3',password='abc')
lancer4 = User.objects.create(username='lancer4',password='abc')
admin1 = User.objects.create(username='admin1',password='abc')
scanner,created = UserType.objects.get_or_create(name='scanner')
overwatch,created = UserType.objects.get_or_create(name='overwatch')
lancer,created = UserType.objects.get_or_create(name='lancer')
admin,created = UserType.objects.get_or_create(name='admin')
AssignedType.objects.create(user=scanner1,user_type=scanner)
AssignedType.objects.create(user=scanner2,user_type=scanner)
AssignedType.objects.create(user=overwatch1,user_type=overwatch)
AssignedType.objects.create(user=overwatch2,user_type=overwatch)
AssignedType.objects.create(user=lancer1,user_type=lancer)
AssignedType.objects.create(user=lancer2,user_type=lancer)
AssignedType.objects.create(user=lancer3,user_type=lancer)
AssignedType.objects.create(user=lancer4,user_type=lancer)
AssignedType.objects.create(user=admin1,user_type=admin)
AssignedType.objects.create(user=admin1,user_type=scanner)
def test_allow_access_only_if_user_is_authorized_GET(self):
c = Client()
c.login(username='scanner1',password='abc')
response = c.get(reverse('scanner'))
self.assertEquals(response.status_code,200)
self.assertTemplateUsed(response,'DataMech/scanner.html')
c.logout()
c = Client()
c.login(username='scanner2','DataMech/scanner.html')
c.logout()
c = Client()
c.login(username='overwatch1',403)
c.logout()
我的urls.py如下:
ERROR: test_allow_access_only_if_user_is_authorized_GET (DataMech.tests.TestScanner)
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\Users\Dell\Desktop\Financial reports project\FinData\FinData\DataMech\tests.py",line 35,in test_allow_access_only_if_user_is_authorized_GET
response = c.get(reverse('scanner'))
File "C:\Python39\lib\site-packages\django\test\client.py",line 733,in get
response = super().get(path,data=data,secure=secure,**extra)
File "C:\Python39\lib\site-packages\django\test\client.py",line 393,in get
return self.generic('GET',path,**{
File "C:\Python39\lib\site-packages\django\test\client.py",line 470,in generic
return self.request(**r)
File "C:\Python39\lib\site-packages\django\test\client.py",line 705,in request
response = self.handler(environ)
File "C:\Python39\lib\site-packages\django\test\client.py",line 129,in __call__
self.load_middleware()
File "C:\Python39\lib\site-packages\django\core\handlers\base.py",line 58,in load_middleware
mw_instance = middleware(handler)
File "C:\Python39\lib\unittest\case.py",line 367,in __init__
testMethod = getattr(self,methodName)
TypeError: getattr(): attribute name must be string
我在这里做错了什么?如果需要更多代码,请告诉我。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。