У меня есть такая модель:
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
EDIT
Пока что я пробовал с этим:
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'