Fea*_*nor 8 django django-forms django-admin django-widget
当字段为readonly时,我想在django admin的字段上显示我的小部件.
admin.py
class AudioTrackAdminInline(admin.StackedInline):
model = AudioTrack
form = AudioTrackForm
readonly_fields = ('file',)
Run Code Online (Sandbox Code Playgroud)
forms.py
class AudioTrackForm(forms.ModelForm):
class Meta:
model = AudioTrack
widgets = { 'file': MediaFileInput, } # my widget
Run Code Online (Sandbox Code Playgroud)
当文件不是只读时,它会显示小部件确定.但当我把它作为readonly包含时,我看到文本行.(如果只读,Django不会使用我的表格)
即使在只读字段,我如何才能使用它?
要么
如果我只设置我的字段,如何显示另一个小部件?
我会说这是一个功能.
当字段设置为readonly时,Django使用display_for_field硬编码结果的函数,你无法自定义它.
另一种方法是不将字段设置为只读和覆盖formfield_for_dbfield,这是一种未记录的ModelAdmin方法,并根据您的需要采取相应措施.
另一种更灵活的解决方案是设置要以只读模式呈现的字段的"禁用"属性,从而覆盖get_form(...)管理类的方法:
def get_form(self, *args, **kwargs):
form = super(SupplierAdmin, self).get_form(*args, **kwargs)
for field_name in self.fake_readonly_fields:
form.base_fields[field_name].disabled = True
return form
Run Code Online (Sandbox Code Playgroud)
请注意,我将readonly字段的名称不是通常的,self.readonly_fields而是来自我命名的不同数组,self.fake_readonly_fields以避免名称重叠
建议的解决方案(使用formfield_for_dbfield)的限制是,以这种方式,您以相同的方式呈现给定类型的所有数据库字段,它应该是只读的还是非读取的.如果您的整个表单应该是只读的,那么这种方式很有效,但如果您处理的表单只有一半是只读而一半不是,那么最好依赖于该disabled属性.
关于我的答案的更多细节:django modeladmin,readonly_fields和boolean fields
| 归档时间: |
|
| 查看次数: |
4700 次 |
| 最近记录: |