我有一个模型,比如“文章”,有一个字段
published = models.BooleanField(default=True)
和一个带有条件的模板:
{% if user.is_staff %}
<li>form.published.label_tag</li>
<li>form.published</li>
{% else %}
<li>form.published.as_hidden</li>
{% endif %}
我使用基于类的通用视图来添加和更新这个模型。
在这种情况下,普通编外和恶意用户仍然可以替换published
字段的值。
我认为我必须将条件移至视图级别以防止此问题,例如
class ArticleEdit(UpdateView):
model = Article
form_class = ArticleForm
def form_valid(self, form):
self.object = form.save(commit=False)
if self.request.user.is_staff:
''' How to let the staff change this value? '''
else:
''' How to set previous value? '''
self.object.save()
return HttpResponseRedirect(self.get_success_url())
假设我从模板中删除了这个隐藏字段。