是否可以在add_form django中显示外键的属性?
例如:
#models.py
class Test(models.Model):
name = models.CharField(max_length=60, db_column='Name') # Field name made lowercase.
product=models.ForeignKey(Product, on_delete=models.DO_NOTHING)
class Product(models.Model):
id = models.AutoField(db_column='Id', primary_key=True)
description = models.CharField(max_length=60, db_column='Description')
#admin.py
class TestAdmin(admin.ModelAdmin):
fields = ['name','product','get_description']
readonly_fields = ['get_description']
def get_description(self):
return self.product.description
自然地,此代码引发“ get_description”中的ErrorFields异常。
但是,当我插入模型Test的条目时,是否存在一种显示“ get_description”的方法?
谢谢
答案 0 :(得分:0)
您可以覆盖ModelAdmin.get_form
并更改其使用的格式,以添加您选择的字段,并填充您喜欢的任何内容。例如:
#admin.py
class TestAdmin(admin.ModelAdmin):
fields = ['name','product']
def get_form(self, request, obj=None, **kwargs):
if obj.product:
# self.form.base_fields is an OrderedDict(field_name=form.Field, ...)
self.form.base_fields['product_description'] = forms.CharField(required=False, initial=obj.product.description)
self.form.base_fields['product_description'].widget.attrs['readonly'] = True
return super(TestAdmin, self).get_form(request, obj, **kwargs)
这将添加一个只读文本输入字段,作为“添加”表单中的最后一个字段。如果您希望将其放置在表单中的其他位置,则必须弄清楚一些逻辑,以完全按照您想要的顺序将self.form.base_fields
重建为新的OrderedDict
。