Django 测试权限中的 ValueError
ValueError in tests permission in django
我想在我的应用程序中测试权限。我想给我的用户权限,看看他们是否在那里。
我收到此错误:
ValueError: invalid literal for int() with base 10: 'myapp.can_view'
代码
class PermissionsTest(WebTest):
def setUp(self):
self.user = G(User, username='user', password='pass')
def test_user_login_permission(self):
app = self.app.get(reverse('myapp:dashboard'), user=self.user)
self.assertEqual(app.status_code, 200)
def test_user_add_permissions(self):
self.user.user_permissions.add('myapp.can_view')
self.user.save()
self.assertTrue(self.user.has_perm('myapp.can_view'))
User.user_permissions
是 M2M 字段,因此您不能向该字段添加字符串。改为添加 Permission
实例:
from django.contrib.auth.models import Permission
permission = Permission.objects.get(codename='can_view')
self.user.user_permissions.add(permission)
还要注意权限 are cached 所以你必须在测试中重新加载 User
对象。
UPDATE:如果您许可的代号不是唯一的,那么您必须像@selcuk 那样在 get()
调用中添加一个 content_type
回答。
更新 2:要创建权限,您有两种选择。
自动,使用 permission
属性 到您的 Model.Meta
class:
class MyModel(models.Model):
class Meta:
permissions = (('can_view', u'Can view my model'), )
手动:
from django.contrib.contenttypes.models import ContentType
from django.contrib.auth.models import Permission
ct = ContentType.objects.ContentType.objects.get_for_model(MyModel)
permission = Permission.objects.create(content_type=ct,
codename='can_view',
name='Can view my model')
您应该将 permission
对象传递给 add
方法,而不是字符串。这应该有帮助:
from django.contrib.auth.models import Permission
from django.contrib.contenttypes.models import ContentType
content_type = ContentType.objects.get_for_model(MyModel)
permission = Permission.objects.get(content_type=content_type, codename='can_view')
request.user.user_permissions.add(permission)
我想在我的应用程序中测试权限。我想给我的用户权限,看看他们是否在那里。 我收到此错误:
ValueError: invalid literal for int() with base 10: 'myapp.can_view'
代码
class PermissionsTest(WebTest):
def setUp(self):
self.user = G(User, username='user', password='pass')
def test_user_login_permission(self):
app = self.app.get(reverse('myapp:dashboard'), user=self.user)
self.assertEqual(app.status_code, 200)
def test_user_add_permissions(self):
self.user.user_permissions.add('myapp.can_view')
self.user.save()
self.assertTrue(self.user.has_perm('myapp.can_view'))
User.user_permissions
是 M2M 字段,因此您不能向该字段添加字符串。改为添加 Permission
实例:
from django.contrib.auth.models import Permission
permission = Permission.objects.get(codename='can_view')
self.user.user_permissions.add(permission)
还要注意权限 are cached 所以你必须在测试中重新加载 User
对象。
UPDATE:如果您许可的代号不是唯一的,那么您必须像@selcuk 那样在 get()
调用中添加一个 content_type
回答。
更新 2:要创建权限,您有两种选择。
自动,使用 permission
属性 到您的 Model.Meta
class:
class MyModel(models.Model):
class Meta:
permissions = (('can_view', u'Can view my model'), )
手动:
from django.contrib.contenttypes.models import ContentType
from django.contrib.auth.models import Permission
ct = ContentType.objects.ContentType.objects.get_for_model(MyModel)
permission = Permission.objects.create(content_type=ct,
codename='can_view',
name='Can view my model')
您应该将 permission
对象传递给 add
方法,而不是字符串。这应该有帮助:
from django.contrib.auth.models import Permission
from django.contrib.contenttypes.models import ContentType
content_type = ContentType.objects.get_for_model(MyModel)
permission = Permission.objects.get(content_type=content_type, codename='can_view')
request.user.user_permissions.add(permission)