Список связанных полей в Django ModelAdmin

Я перечисляю модель в администраторе Django через TabularInline. Внутри этого встроенного я хотел бы использовать синтаксис обхода модели Django для отображения данных в других моделях, упомянутых в модели, с помощью внешних ключей. например

class MyRelatedModel(models.Model) name = models.CharField(max_length=50) created = models.DateField(auto_now_add=True) other = models.ForeignKey('MyOtherRelatedModel') class MyOtherRelatedModel(models.Model) name = models.CharField(max_length=50) created = models.DateField(auto_now_add=True) class MyRelatedModelInline(admin.TabularInline): model = MyRelatedModel fields = ['name', 'created', 'other__name'] #readonly_fields = ['name', 'created', 'other__name'] 

Однако использование «other__name» вызывает ошибку ImproperlyConfigured:

 'MyRelatedModelInline.fields' refers to field 'other__name' that is missing from the form 

Синтаксис обхода модели не поддерживается в экземплярах ModelAdmin? Если это поддерживается, что я делаю неправильно?

EDIT: Если я раскомментировал readonly_fields, ошибка будет:

 Caught AttributeError while rendering: 'MyMainModelAdmin' object has no attribute '__name__' 

One Solution collect form web for “Список связанных полей в Django ModelAdmin”

Согласно предложению Розентана выше, вы можете отображать связанные (один-к-одному или много-к-одному) данные в режиме чтения с помощью моделей администрирования Inline. Вот небольшой пример, просто чтобы убедиться, что мы все на одной странице. Ниже вы можете видеть, что есть три способа достижения вашей цели (если я правильно понимаю эту цель).

models.py:

 class Company(models.Model): name = models.CharField(max_length=50) class Employee(models.Model): name = models.CharField(max_length=50) company = models.ForeignKey('Company') car = models.ForeignKey('Car') def model_callable(self): return self.car.rego class Car(models.Model): rego = models.CharField(max_length=50) 

admin.py:

 def unbound_callable(emp): return emp.car.rego class EmployeeInline(admin.TabularInline): model = Employee fields = ('name', 'model_callable', 'model_admin_callable', unbound_callable) readonly_fields = ('model_callable', 'model_admin_callable', unbound_callable) def model_admin_callable(self, emp): return emp.car.rego class CompanyAdmin(admin.ModelAdmin): model = Company inlines = (EmployeeInline,) admin.site.register(Company, CompanyAdmin) 

Как вы можете видеть, «readonly_fields» обрабатывается так же, как «list_display» в соответствии с документацией Django для contrib.admin (начиная с версии 1.2).

В приведенном выше примере, когда вы редактируете компанию, вы увидите ее сотрудников. Каждая строка будет иметь имя сотрудника в редактируемом текстовом поле, а рядом с именем вы увидите только текстовый бит текста для рего для автомобиля сотрудника (emp.car.rego).

Ссылаясь на ваш первоначальный вопрос, вы хотели бы ссылаться на связанные данные как «other__name». Это не сработает. Выражения, такие как other__name или car__rego имеют особое значение как аргументы ключевого слова в фильтрах при запуске Django-запросов. Например, при получении сотрудника, у которого есть автомобиль с определенным номером rego:

 Employee.objects.filter(car__rego='111') 

Надеюсь, это поможет.

J

  • где я могу найти исходный файл «admin.site.urls»?
  • Django admin - сортировка по полю GenericForeignKey
  • django admin list_filter "или" условие
  • Ошибка пользовательской команды Django: непризнанные аргументы
  • Django - Как получить URL-адрес администратора из экземпляра модели
  • Фильтр по умолчанию в админ-сайте
  • Фильтр Django admin_horizontal (& filter_vertical) не работает
  • Приложения не будут отображаться в администраторе Django
  •  
    Interesting Posts for Van-Lav

    Configparser и строка с%

    Евклидова матрица расстояний с использованием Pandas

    Ошибка при повторении серии Pandas

    Оператор Python 'return not' в подпроцессе returncode

    Библиотека BitTorrent для Python

    Python: элементное объединение двух списков одинаковой длины

    Глобальная переменная для параметров отладки и ведения журнала в GAE Python

    Объединение предварительно отсортированных файлов без чтения всего в память

    Как продолжить следующую итерацию цикла в Python PDB?

    Почему C, C ++ и LISP настолько распространены во встроенных устройствах и роботах?

    python tkinter отображает анимированный GIF с использованием PIL

    Как проверить, является ли данный объект datetime «между» двумя датами?

    градиентный спуск с использованием python и numpy

    Как использовать связанный менеджер и обратный поиск для очистки этого набора запросов Django

    Как сортировать словари объектов по значению атрибута в python?

    Python - лучший язык программирования в мире.