Как отобразить экземпляры модели с обратной ссылкой в ​​интерфейсе администратора Django? - PullRequest
1 голос
/ 07 февраля 2020

У меня есть ссылки на ManyToMany между двумя моделями, сравнимые с примером Django "Многие ко многим" :

# models.py

from django.db import models

class Publication(models.Model):
    title = models.CharField(max_length=30)

    class Meta:
        ordering = ['title']

    def __str__(self):
        return self.title

class Article(models.Model):
    headline = models.CharField(max_length=100)
    publications = models.ManyToManyField(Publication)

    class Meta:
        ordering = ['headline']

    def __str__(self):
        return self.headline
# admin.py
from .models import Article, Publication

admin.site.register(Article)
admin.site.register(Publication)

По умолчанию Django Интерфейс администратора Я вижу для каждой статьи, с какими публикациями она связана. Но я не вижу ни одной публикации, с какой статьей она связана. Как я могу добавить эту информацию в интерфейс администратора?

1 Ответ

1 голос
/ 07 февраля 2020

Django позволяет просматривать отношения M2M в обратном порядке, используя атрибут modelname_set для каждого объекта. Вы можете использовать это, определив вызываемый элемент в admin.py и включив его в list_display следующим образом:

admin.py

@admin.register(Publication)
class PublicationAdmin(admin.ModelAdmin):
    list_display = ['title', 'articles']

    def articles(self, object):
        return ", ".join([str(a) for a in object.article_set.all()])

admin.site.register(Article)

Вы можете изменить как articles отображается, конечно. Это простой пример. Обратите внимание, что это может стать громоздким, если в вашей публикации много статей.

...