1

我想允许所有用户在他们是所有者的地方创建一个“域”,但我也希望管理员用户能够为其他用户创建一个“域”。

到目前为止,这是我要处理的非管理员案例:

# views.py
class DomainCreateView(LoginRequiredMixin, DomainActionMixin, CreateView):
    model = Domain
    action = "created"
    form_class = DomainForm
    success_url = 'domains/'

    def form_valid(self, form):
        form.instance.user = self.request.user
        return super(DomainCreateView, self).form_valid(form)

# forms.py
class DomainForm(forms.ModelForm):
    class Meta:
        model = Domain
        fields = ('title', 'url')

    def __init__(self, *args, **kwargs):
        self.helper = FormHelper()
        self.helper.form_tag = False
        self.helper.layout = Layout(
            Field('title', placeholder="title"),
            Field('url', placeholder="url"),
        )
        super(DomainForm, self).__init__(*args, **kwargs)

请注意,我使用了一些 mixin 和脆的形式,所以这就是它有点不标准的原因。我想两者都不应该影响这个问题。

4

1 回答 1

1

定义两种表单,一种用于普通用户,一种用于超级用户,其中有一个额外的user字段。

然后重写该get_form_class方法,该方法根据用户的权限返回正确的表单类。您可以像self.request.user在方法中所做的那样访问用户form_valid

最后,更改您的form_valid方法,以便仅将用户设置为普通用户。

于 2013-06-19T21:49:27.630 回答