我對用戶有複雜的用戶定義權限。但爲了讓思考變得更簡單,讓我們假設每個用戶只有read-only
或write
權限。使Django在模板中返回forms.instance
我使用Django表單編輯和保存模型對象。而我的目標是呈現<input>
在Django的HTML模板爲那些誰擁有編輯某個給定的模型實例的權限的用戶,和一個硬編碼的數據(不<input>
標籤),如果用戶只具有隻讀權限。
目前,我有下面的代碼在我的Django的模板來實現這一目標:
{%if user.has_permission_to_edit %}
{{my_form.my_field}}
{% else %}
{{my_form.instance.my_field}}
{% endif %}
而這裏的my_form
:
class MyForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
for field_name, field in self.fields.items():
field.widget.attrs['class'] = 'form-control input-sm'
if field.required == True:
field.widget.attrs['required'] = ''
class Meta:
model = MyModel
fields = ('my_field',)
與模板代碼的問題是,我有使用多個{%if%} {%else%}塊。我對Django比較陌生,我知道有很多先進的工具使Django代碼可能超級幹,所以我想問你們,什麼是組織我在模板中描述的最乾燥的方法。具體來說,是否有任何方法可以使Django根據表單定義中指定的某些條件返回實例值?或者我需要一些使用定義的標籤?或者也許有一些完全不同的架構被用來實現這樣的目標?
我不知道我明白你想達到什麼目的?你在編輯模型對象嗎?如果用戶有編輯權限,行爲如何改變? – AKS
哪種類型的字段是你想要顯示硬編碼值的地方?它是一個文本字段嗎? – AKS
嗯,它可以是文本字段,數值,複選框......任何東西。根據各自模型字段類型的類型 –