フィールドを持つ「記事」などのモデルがあります
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())
この隠しフィールドをテンプレートから削除すると仮定します。