Django基于字段阻止对detailview的访问
我有一个detailView/模板,它有一个Django基于字段阻止对detailview的访问,django,detailview,Django,Detailview,我有一个detailView/模板,它有一个机密字段(布尔值),我希望只有员工用户(或更高级别的用户)才能访问详细信息页面。目前,我已将以下内容添加到我的模板中,使其正常工作: {% if enzymes.confidential == True %} {% if user.is_staff %} # confidential data is listed here {% else %} <p>You do not have access
机密
字段(布尔值),我希望只有员工用户(或更高级别的用户)才能访问详细信息页面。目前,我已将以下内容添加到我的模板中,使其正常工作:
{% if enzymes.confidential == True %}
{% if user.is_staff %}
# confidential data is listed here
{% else %}
<p>You do not have access to this page</p>
{% endif %}
{% else %}
# non confidential data is listed here
{% endif %}
典型的方法是重写
get\u queryset
方法,如果用户不是工作人员,则过滤queryset。如果非工作人员试图访问机密项目,他们将获得404页面
class DetailView(generic.DetailView):
template_name = 'gts/detail.html'
model = Enzymes
def get_queryset(self):
queryset = super(DetailView, self).get_queryset()
if not request.user.is_staff:
queryset = queryset.filter(confidential=False)
return queryset
请注意,您不必将值与Django模板中的
True
或False
进行比较。您可以将{%if enzymes.secretary==True%}
简化为{%if enzymes.secretary%}
。很好,这样可以覆盖类的所有默认函数吗?我不确定是否理解您的问题。基于类的泛型视图的主要好处是,您可以通过子类化和重写方法/属性来定制它们。困难的一点可能是知道这些方法是如何组合在一起的,这样您就知道要覆盖什么。我的意思是方法,我的错。
class DetailView(generic.DetailView):
template_name = 'gts/detail.html'
model = Enzymes
def get_queryset(self):
queryset = super(DetailView, self).get_queryset()
if not request.user.is_staff:
queryset = queryset.filter(confidential=False)
return queryset