Django UpdateView:通过函数而不是成员变量动态定义字段

时间:2017-05-28 18:49:24

标签: python django django-generic-views

我有一个非常简单的UpdateView,我的字段由成员变量fields

定义
class DataUpdateView(generic.edit.UpdateView):
    template_name = 'data/edit.html'
    model = Data
    fields = ['title', 'text']
    text2 = forms.CharField(widget=forms.Textarea)
    success_url = reverse_lazy('data:index')

现在我的情况是我想根据特殊的用户权限更改字段值,但我不知道如何通过函数(或任何更好的选项)定义字段。

这是否可以与Django(我使用的是最新版本)

问候
通卡

2 个答案:

答案 0 :(得分:3)

当然可以。这是一个基于类的常规视图,这意味着您应该能够覆盖getpost等方法,并在那里修改字段。

在这种情况下,您希望为所有类型的请求设置字段,因此添加dispatch方法应该是正确的选择:

class DataUpdateView(generic.edit.UpdateView):
    template_name = 'data/edit.html'
    model = Data
    fields = ['title', 'text']
    text2 = forms.CharField(widget=forms.Textarea)
    success_url = reverse_lazy('data:index')

    def dispatch(self, request, *args, **kwargs):
        # Check permissions for the request.user here
        self.fields = ['title', 'text', 'extrafield']
        return super().dispatch(request, *args, **kwargs)

答案 1 :(得分:1)

基于类的视图中使用的大多数类属性都可以在等效命名的方法中设置。在这种情况下,您可以定义get_fields()