我有一个这样的模型:
class MyModel(models.Model):
status = models.CharField(choices=ChoicesModel.MY_CHOICES, max_length=128, blnk=True, null=True)
出于可重用性的考虑,我有一个单独的模型可以选择。到目前为止,效果很好。
现在,在管理员视图上,我需要显示这些选择,但是要在另一个模型的list_display
中显示。我尝试了很多事情都没有成功。
这些模型与ForeignKey
相关。
因此,具体地说,我需要父模型list_display
,以显示对与ForeignKey相关的子模型所做的选择。
ForeignKey
是在子模型上定义的,因此它通过此ForeignKey
字段与父模型相关。
那么,我如何从父项中读取在子对象上做出的选择,并在其父项的list_display
上显示呢?
我正在使用Django 1.11
编辑
到目前为止,我已经尝试过:
related = models.OneToOneField('ChildModel', null=True, on_delete=models.SET_NULL)
然后,在管理员上
def get_child_status(self, obj):
return obj.related.my_choice_field
get_child_status.short_description = 'Child status'
当然,在我的list_display上:
list_display = ('field1', 'field2', 'get_child_status')
当我访问父模型的changelist
视图时,它会抛出我:
'NoneType' object has no attribute 'my_choice_field'
编辑2
这是完整的回溯:
Traceback (most recent call last):
File "C:\virtualenv\lib\site-packages\django\contrib\admin\utils.py", line 283, in lookup_field
f = _get_non_gfk_field(opts, name)
File "C:\virtualenv\lib\site-packages\django\contrib\admin\utils.py", line 317, in _get_non_gfk_field
field = opts.get_field(name)
File "C:\virtualenv\lib\site-packages\django\db\models\options.py", line 619, in get_field
raise FieldDoesNotExist("%s has no field named '%s'" % (self.object_name, field_name))
django.core.exceptions.FieldDoesNotExist: MyModel has no field named 'get_child_status'