Как получить доступ к переводу, определенному в базовой модели, из представлений и панели администратора дочерней модели

В проекте, который достался мне в наследство, есть несколько полиморфных моделей, основанных на общей модели. Что-то вроде:

from django.db import models
from polymorphic.models import PolymorphicManager, PolymorphicModel

class Product(PolymorphicModel):
    name=models.CharField(max_length=127)
    objects=PolymorphicManager


class Book(Product):
    pass


class Drink(Product):
    pass

<

Тем не менее, я модифицировал модели следующим образом:

from django.db import models
from parler.models import TranslatableModel, TranslatedFields
from parler.managers import TranslatableManager, TranslatableQuerySet
from polymorphic.models import PolymorphicManager, PolymorphicModel
from polymorphic.query import PolymorphicQuerySet

class ProductQuerySet(PolymorphicQuerySet, TranslatableQuerySet):
    pass


class ProductManager(PolymorphicManager, TranslatableManager):
    queryset_class = MarkerQuerySet


class Product(PolymorphicModel):
    translations = TranslatedFields(
        name=models.CharField(max_length=127)

    objects=ProductManager


class Book(Product):
    pass


class Drink(Product):
    pass

А в оболочке django все работает нормально:

In [1]: from product.models import Book

In [2]: b0 = Book.objects.first()

In [3]: b0
Out[3]: <Book: A Brief History of Time>

In [4]: b1 = Book()

In [5]: b1.name = 'Hitchhikers Guide to the Galaxy'

In [6]: b1.save()

In [7]: b2 = Book(name='Slaughterhouse V')

In [8]: b2.save()

Однако, когда я запускаю тесты конечных точек, я получаю несколько загадочную ошибку:

.venv/lib/python3.12/site-packages/django/db/models/sql/query.py:1577: in _add_q
    child_clause, needed_inner = self.build_filter

.
.
.

>       arg, value = filter_expr
E       ValueError: too many values to unpack (expected 2)

И другая ошибка, когда я пытаюсь увидеть панель администратора для дочерних моделей:

Cannot resolve keyword 'name' into field.

Я попробовал добавить вычисляемые свойства к дочерним моделям, чтобы посмотреть, может ли это исправить админ-панель, но это не помогло. Есть ли у кого-нибудь опыт создания чего-то подобного?

Мне следовало внимательнее читать документацию. Все заработало, как только я добавил PolymorphicParentModelAdmin и PolymorphicChildModelAdmin в качестве базовых классов в соответствующие панели администратора, а также указал поля, которые они делают доступными:

ProductAdmin(
    TranslatableAdmin,
    PolymorphicParentModelAdmin,
):
    base_model = Product
    child_models = (Book, Drink)


BookAdmin(
    TranslatableAdmin,
    PolymorphicChildModelAdmin,
):
    base_model = Product
    base_model = Marker
    base_fields = ("name")


DrinkAdmin(
    TranslatableAdmin,
    PolymorphicChildModelAdmin,
):
    base_model = Product
    base_model = Marker
    base_fields = ("name")


Вернуться на верх