模型Post
的布尔字段moderation
用于在管理员用户(具有user.is_staff
作为True
的管理员用户批准后发布。
这里有一个“帖子更新”页面,用户(帖子的作者)和管理员用户可以在其中更新帖子信息。
我希望仅当用户是管理员(moderation
)时才显示字段user.is_staff == True
(这是一个复选框)。
models.py
class Post(models.Model):
...
moderation = models.BooleanField(default=True)
...
forms.py
class PostForm(forms.ModelForm):
class Meta:
model = Post
fields = ['title', 'body', 'logo']
views.py
class PostUpdateView(PermissionRequiredMixin, UpdateView):
model = Post
fields = ['title', 'body', 'logo']
permission_required = 'post.can_mark_returned'
post_form.html
{% extends "base_generic.html" %}
{% block content %}
<form action="" method="post" enctype="multipart/form-data">
{% csrf_token %}
<table>
{{ form.as_table }}
</table>
<input type="submit" value="Submit" />
</form>
{% endblock %}
答案 0 :(得分:3)
这个similar question为您提供一些想法。
我还建议覆盖FormMixin.get_form_class()
并使用modelform_factory()
:
from django.forms import modelform_factory
class PostUpdateView(PermissionRequiredMixin, UpdateView):
model = Post
permission_required = 'post.can_mark_returned'
def get_form_class(self)
fields = ['title', 'body', 'logo']
if self.request.user.is_staff:
fields.append('moderation')
return modelform_factory(
self.model,
fields=fields)