2 回答

TA贡献1820条经验 获得超10个赞
您可能需要重写 get_fields 和 get_readonly_fields 方法:
def _get_non_field_names(self, obj, candidate_fields):
for field in candidate_fields:
if hasattr(obj, field) and getattr(obj, field):
yield field
elif getattr(self, field)(obj):
yield field
def get_fields(self, request, obj=None):
form = self._get_form_for_get_fields(request, obj)
candidate_fields = self.fields if self.fields else list(form.base_fields)
fields = self._get_non_field_names(obj, candidate_fields)
readonly_fields = list(self.get_readonly_fields(request, obj))
return list(fields) + readonly_fields
def get_readonly_fields(self, request, obj=None):
candidate_readonly_fields = self.readonly_fields
readonly_fields = list(self._get_non_field_names(obj, candidate_readonly_fields))
return readonly_fields

TA贡献1797条经验 获得超4个赞
困难的部分仍然是在自定义字段上检查 None 值。
目前我只使用以下 get_fields 来检查,逻辑性不大,但仍然可以从表单中删除字段:
def get_fields(self, request, obj=None):
fields = super(WithdrawalsAdmin, self).get_fields(request, obj)
fields_list = list(fields)
if obj:
if obj.to_address is None:
fields_list.remove('to_address')
.... #and other fields
fields_tuple = tuple(fields_list)
return fields_tuple
添加回答
举报