我有一个非常简单的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(我使用的是最新版本)
问候
通卡
答案 0 :(得分:3)
当然可以。这是一个基于类的常规视图,这意味着您应该能够覆盖get
和post
等方法,并在那里修改字段。
在这种情况下,您希望为所有类型的请求设置字段,因此添加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()
。