Django用户权限
我有一个django应用程序,只有超级用户或工作人员才能在其中创建对象。我是这样做的 模型Django用户权限,django,django-views,Django,Django Views,我有一个django应用程序,只有超级用户或工作人员才能在其中创建对象。我是这样做的 模型 class Data(models.Model): content = models.TextField() 观点 这样做之后,我创建了两个用户,第一个是超级用户(admin),第二个是普通用户(test)。之后,我以超级用户(admin)的身份登录到django管理面板,将第二个用户的(test)权限更改为staff,并授予他创建数据对象的权限 但问题是,每当我尝试以(test)第二个用户身份
class Data(models.Model):
content = models.TextField()
观点
这样做之后,我创建了两个用户,第一个是超级用户(admin
),第二个是普通用户(test
)。之后,我以超级用户(admin
)的身份登录到django管理面板,将第二个用户的(test
)权限更改为staff,并授予他创建数据
对象的权限
但问题是,每当我尝试以(test
)第二个用户身份创建data
对象时,它仍然返回Http404
错误。为什么会这样
另外:当我将第二个用户(
test
)的权限改为superuser
,而不是staff
,一切正常,它能够创建数据
对象(不再是404错误)。但是我想让它保持工作人员
&能够创建数据。我认为问题在于你的如果
情况,那么,按以下方式更改它def data_create(request):
if request.user.is_staff or request.user.is_superuser:
# Create the Data Object
else:
raise Http404
为什么会有这种行为?
In [11]: not False or not True
Out[11]: True
希望上面的陈述描述了它的性质。request.user.is_staff和
request.user.is_superuser
的输出是什么?当你以测试用户
的身份登录时,我在管理面板中让测试
用户成为超级用户帐户的工作人员。但是由于工作人员test
用户无法创建数据。只需在函数创建之后执行print()
,就像这样,def data\u create(request):print(request.user.is\u staff)print(request.user.is\u superuser)return“somethind”
@jerinterGeorge先生,我直接在模板{{request.user.is_staff}
正在返回True
&{{request.user.is_superuser}当我以test
用户身份登录时,
返回False
。这让人困惑,代码是否仍然相同?我的意思是只是条件颠倒了,那么为什么它的行为会不同呢?不,不是。不假或不真
等于真或假
,这等于真
,现在我明白了。谢谢你非常好,先生:)如果用户不是职员或者用户不是超级用户,那么您的if语句(初始语句)类似于引发404错误。在测试用户中,他只是职员
,也就是说他不是超级用户
。因此情况出现了问题
In [11]: not False or not True
Out[11]: True