如何仅为user.is_staff制作模型属性?

时间:2019-01-17 15:10:24

标签: python django

模型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 %}

1 个答案:

答案 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)