需要在管理员变更列表上显示特定于模型的相关字段-Django 1.11

时间:2019-03-18 14:02:00

标签: django python-3.x

我有一个这样的模型:

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'

0 个答案:

没有答案