Django: Используйте разные сериализаторы для разных (наследуемых) моделей в одной конечной точке
У меня есть такие модели (только для наглядности):
class Customer(models.Model):
created = models.DateTimeField(auto_now_add=True)
class Person(Customer):
first_name = models.CharField(max_lenght=40)
last_name = models.CharField(max_length=40)
# More data related to a person
class Company(Customer):
company_name = models.CharField(max_length=100)
# More data related to a company
Как видите, у меня может быть два "типа" клиентов, но оба они являются "клиентами" (я думаю, это хрестоматийный пример наследования). Все прекрасно работает на уровне базы данных, но теперь мне нужно создать конечную точку, которая будет "динамически" показывать данные клиента в зависимости от того, к какому "типу" он относится. Что-то вроде этого:
[
{
"id": 1,
"first_name": "John",
"last_name": "Doe"
},
{
"id": 2,
"company_name": "Big buck"
},
{
"id": 3,
"first_name": "Jane",
"last_name": "Doe"
}
]
При работе в рамках моего проекта я использую такие вещи, как:
customer = Customer.objects.get(pk=100)
if hasattr(customer, 'person'):
pass # Do some stuff
elif hasattr(customer, 'company'):
pass # Do some other stuff
# Do common stuff related to both customer 'types'
До сих пор мне удавалось обходиться использованием разных конечных точек для клиентов "Person" и "Company", но теперь мне нужно получить оба "типа" клиентов в одной конечной точке. И я не могу понять, как написать сериализатор, чтобы получить это!
Посмотрев вокруг, я нашел этот пример использования полиморфных моделей, однако, поскольку проект уже довольно большой, я хотел бы сохранить все как можно более "ванильным". Поэтому мои конкретные вопросы таковы:
- Is there a way to create a "polymorphic" serializer using the above model definition?
- If
django-polymorphic(anddjango-rest-polymorphic) are the way to go, will using them break the functionallity?