Python 3.7,Django 3.0
大家好,我遇到了Django权限问题。
我有一个简单的Article
类作为模型,如下所示:
class Article(models.Model):
title = models.CharField(max_length=120)
content = models.TextField()
active = models.BooleanField()
borrower = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True)
class Meta:
permissions = [("can_mark_owned", "Set article as owned")]
在我的views.py中,我认为该视图仅对具有“ can_mark_owned”权限的用户可用。如下所示:
class AssignOwnerLibrarian(LoginRequiredMixin, PermissionRequiredMixin, UpdateView):
permission_required = ('article.can_mark_owned')
template_name = 'articles/article_assign_owner.html'
form_class = AssignArticleOwnerForm
queryset = Article.objects.all()
我的问题是,仅当我以超级用户身份登录时才能访问此视图,而不能使用拥有权限(通过“管理”页面添加了权限)的用户访问,因此我在其中获得 403禁止。
在我的测试文件中,我有以下代码:
class RenewBookInstancesViewTest(TestCase):
def setUp(self):
# Create a user
test_user2 = User.objects.create_user(username='testuser2', password='2HJ1vRV0Z&3iD')
test_user2.save()
permission = Permission.objects.get(name='Set article as owned')
test_user2.user_permissions.add(permission)
test_user2.save()
test_user2 = get_object_or_404(User, pk=test_user2.id)
print(test_user2.has_perm('article.can_mark_owned')) # returns False
由于某种原因,最后一行的打印返回False。
非常感谢您的帮助,我已经在此问题上花费了多个小时。
谢谢!
答案 0 :(得分:0)
弄清楚了,傻瓜自己写了Model名称而不是App名称:
'article.can_mark_owned'
应该是'Blog.can_mark_owned'
我不好!