Подтвердить что ты не робот

Django admin - Смешивание нескольких строк в одном интерфейсе администратора

У меня есть макет модели Django, который выглядит примерно так:

class Author(models.Model):
    name = models.CharField(max_length=50, unique=True)

class Publication(models.Model):
    author = models.ForeignKey(Author)        

    #Some shared fields

    class Meta:
        abstract = True

class Book(Publication):
    #Book specific fields

class Poem(Publication):
    #Poem specific fields

Вообще говоря, я хотел бы показать информацию, указанную автором, и отсортировать ее по некоторой информации, например pub_date, чтобы конечный пользователь увидел что-то вроде:

Автор A:

  • Поэма 1
  • Поэма 2
  • Книга 1
  • Поэма 3
  • Книга 2

Автор B:

  • Книга 1
  • Книга 2
  • Поэма 1
  • Поэма 2
  • Книга 3

И так далее. Я могу понять, как отображать их на интерфейсе (я могу либо использовать django-polymorphic, либо просто объединить author.book_set.all() и author.poem_set.all() в один список и отсортировать). Но я НЕ МОГУ понять, как реализовать это на сайте Admin. Я хотел бы, чтобы структура была точно такой же, как и выше, так что, когда я нажимаю на Author A, я получаю:

  • inline для Poem 1
  • inline для Poem 2
  • встроенный для книги 1
  • inline для Поэмы 3
  • inline для книги 2

Если я просто присоединяю стихотворение и книгу как TabularInlines, они будут разделены на отдельные поля, например:

  • inline для Poem 1
  • inline для Poem 2
  • inline для Poem 3

  • inline для книги 1

  • inline для книги 2

Но я считаю важным, чтобы они были объединены вместе в одном наборе полей (с полями, специфичными для другого дочернего класса, либо серыми, либо отсутствующими для каждого встроенного). Кто-нибудь знает, как это реализовать?

4b9b3361

Ответ 1

Ну, похоже, не было простого способа сделать это, поэтому я немного углубился в django.contrib и создал приложение для обработки этого: Django Merged Inlines. Если это было бы полезно кому угодно, оно доступно здесь:

https://github.com/MattBroach/Django-Merged-Inlines