如何使模型的属性只为user.is\u员工?

2024-06-15 09:17:27 发布

您现在位置:Python中文网/ 问答频道 /正文

模型Post具有布尔字段moderation,用于在管理员用户(将user.is_staff作为True)批准后发布。你知道吗

有一个“Post update”页面,用户(帖子的作者)和管理员用户可以在其中更新帖子信息。 我希望只有当用户是管理员(user.is_staff == True)时才显示字段moderation(这是一个复选框)。你知道吗

型号.py

class Post(models.Model):
    ...
    moderation = models.BooleanField(default=True)
    ...

表单.py

class PostForm(forms.ModelForm):
    class Meta:
        model = Post
        fields = ['title', 'body', 'logo']

视图.py

class PostUpdateView(PermissionRequiredMixin, UpdateView):
    model = Post
    fields = ['title', 'body', 'logo']
    permission_required = 'post.can_mark_returned'

发布_表单.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 %}

Tags: 用户pyformtrue表单ismodels管理员
1条回答
网友
1楼 · 发布于 2024-06-15 09:17:27

这个similar question有一些想法给你。你知道吗


我还可以建议重写^{}并使用^{}

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)

相关问题 更多 >