簡體   English   中英

修改Django ModelForms字段

[英]Modifying a Django ModelForms fields

我有一個Django模型,該模型具有一個外鍵owner ,是指擁有此對象的用戶。 為了讓其他用戶編輯這些對象,我目前使用forms.ModelForm ,到目前為止效果很好。

但是我知道要讓所有者(只有所有者)更改其擁有的對象的所有者(什么是所有權!:)。 因此,我嘗試了以下方法:

class FolderForm(forms.ModelForm):
    def __init__(self, user, *args, **kwargs):
        if kwargs.get("instance", False):
            if user == kwargs["instance"].owner:
                self._meta.fields += ("owner",)

        super(FolderForm, self).__init__(*args, **kwargs)

    class Meta:
        model = Folder
        fields = (
            "name",
            "description",
        )

但這是行不通的,因為Django使用一些metaclass-magic來設置模型上的字段,這似乎是在調用我的子類__init__之前完成的。

有人做過這樣的事嗎?

我喜歡正常使用閉包

def make_form(exclude_user=True):
    class Form(forms.ModelForm):
        class Meta:
            model = Folder         
            exclude = ['user'] if exclude_user else None
    return Form

form_cls = make_form(request.user != folder.owner)

為什么不創建兩個表單:

對於那些不擁有數據的用戶(所有者),所有者將所有者排除在外,並在您的視圖中執行簡單的if語句:

if request.user == Model.owner:
    form = OwnerForm
else:
    form = OthersForm

保持盡可能簡單,以贏得巨大的勝利。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM