Django-rest-framework игнорирует поля из миксина модели
У меня есть следующая конфигурация моделей django с базовыми классами и миксином для дополнительных полей, но django-rest-framework
игнорирует поля из класса миксина.
Модели
from django.db import models
class Base(models.Model):
a = CharField()
class Meta:
abstract = True
class Mixin(object):
b = CharField()
class Concrete(Base, Mixin):
c = CharField()
class Meta(Base.Meta):
abstract = False
Сериализаторы
from rest_framework import serializers
class BaseSerializer(serializers.Serializer):
class Meta:
fields = ('a',)
abstract = True
class ConcreteSerializer(BaseSerializer):
class Meta(BaseSerializer.Meta):
model = Concrete
fields = ('b', 'c',)
Видовые наборы
from rest_framework import viewsets
class BaseViewSet(viewsets.ModelViewSet):
# Some common @actions here.
class Meta:
abstract = True
class ConcreteViewSet(BaseViewSet):
serializer_class = ConcreteSerializer
class Meta(EquipmentItemEditProposalViewSet.Meta):
abstract = False
УРЛЫ
from rest_framework import routers
router = routers.DefaultRouter()
router.register(r'concrete', ConcreteViewSet, basename='concrete')
Однако, когда я перехожу по ссылке http://localhost/api/concrete/, я получаю форму django-rest-framework
с полями a
и c
, но не поле b
из миксина.
NOTE: если я сделаю класс Mixin
наследуемым от django.db.models.Model
вместо object
, то я получу поле, но это не сработает, потому что применение миграции django приводит к проблеме наследования алмазов:
TypeError: Cannot create a consistent method resolution
order (MRO) for bases Model, Mixin
Есть ли решение этой проблемы?
Спасибо!
EDIT: то, что заставляет вещи работать, это если я явно добавляю поля в Mixin
к BaseSerializer
. Однако это не так DRY, как мне хотелось бы.