【发布时间】:2018-05-03 11:54:57
【问题描述】:
我正在尝试编辑 fieldset.html 模板,以便在只读 div 下添加隐藏输入(在只读情况下)。
{% if field.is_readonly %}
<div class="readonly {% if field.field.name %} field-{{ field.field.name }}{% endif %}">{{ field.contents }}</div>
<input id="{% if field.field.name %} id-{{ field.field.name }}{% endif %}" type="hidden" value="{{ field.field.initial }}"/>
{% else %}
{{ field.field }}
{% endif %}
我的问题是,如果我使用“get_readonly_fields”设置只读字段,我无法提交表单,因为需要隐藏字段(我认为这是使用 div 而不是隐藏输入的 django 的一个大错误)。
我尝试使用上面的代码修复它,但我无法将值插入到我的字段中,因为“field.field.initial”对于只读字段是空的。我该如何解决?
更新
我的form.py:
class MyModelAdminForm(forms.ModelForm):
val1 = forms.CharField()
val2 = forms.ModelChoiceField(queryset=User.objects.filter(groups__name='Group1'))
val3 = forms.CharField(widget=forms.DateInput(attrs={'type': 'date'}))
class Meta:
model = MyModel
fields = ('val1', 'val2', 'val3')
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
for field in self._meta.fields:
attrs = {'class':'form-control'}
self.fields[field].widget.attrs.update(attrs)
我的管理员.py
class CampaignAdmin(admin.ModelAdmin):
def get_form(self, request, obj=None, **kwargs):
return MyModelAdminForm
def get_fieldsets(self, request, obj=None):
return [
(None, {'fields': ['val1', 'val2']}),
('Informations', {'fields': ['val3']}),
]
def get_readonly_fields(self, request, obj=None):
if obj:
return self.readonly_fields + ('val2',)
else:
return self.readonly_fields
我需要 val2 在编辑页面中处于只读模式。
【问题讨论】:
标签: django django-forms django-templates