2017-05-28 46 views
1

我有一個非常簡單的UpdateView,在我的領域是由成員變量定義現在fieldsDjango的更新視圖:通過功能,而不是一個成員變量

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

當然可以。這是一個普通的基於類的視圖,這意味着你應該能夠覆蓋它的方法,如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) 
+0

工程很好。我也會檢查丹尼爾的方法。 – tonka

1

大多數基於類的觀點現金使用的類屬性的等效設置改爲命名方法。在這種情況下,您可以定義get_fields()

+0

很酷。明天我會檢查一下。 – tonka

+1

我不認爲這適用於通用視圖(@tonka讓我知道,如果我錯了)。它適用於管理視圖和rest_framework序列化器。可能值得一票,你覺得怎麼樣? – Igonato

相關問題