[英]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.