私はユーザに対して複雑なユーザ定義の権限を持っています。しかし、もっと簡単に思うには、それぞれのユーザーに対してread-only
またはwrite
のアクセス許可しかないとしましょう。Djangoフォームはテンプレート内のforms.instanceを返すようにする
私はモデルオブジェクトを編集して保存するためにDjangoフォームを使用しています。そして私の目標は、与えられたモデルインスタンスを編集する権限を持つユーザのためにDjango HTMLテンプレートに<input>
をレンダリングし、ユーザに読み取り専用のアクセス権しかない場合はハードコードされたデータ(<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のコードをスーパーDRYにする高度なツールがたくさんあることを知っていますので、テンプレートに記述したものを整理する最もDRY的な方法は何ですか?具体的には、フォーム定義内で指定されたいくつかの条件に基づいてDjangoフォームがインスタンス値を返すようにする方法はありますか?あるいは、定義済みのタグを使用する必要がありますか?または、このような目標を達成するために全く異なるアーキテクチャが使用されているかもしれませんか?
私はあなたが達成したいことを理解していますか分かりませんか?あなたはモデルオブジェクトを編集していますか?ユーザーに編集権限がある場合、その動作はどのように変更されますか? – AKS
ハードコードされた値を表示するフィールドのタイプはどれですか?テキストフィールドですか? – AKS
これは、テキストフィールド、数値、チェックボックスなどがあります。それぞれのモデルフィールドタイプのタイプに基づいて –