Можно ли наследовать ModelSerializer и объединить модели?Python

Программы на Python
Anonymous
Можно ли наследовать ModelSerializer и объединить модели?

Сообщение Anonymous »

Я пытаюсь наследовать UserCreatePasswordRetypeSerializer от djoser
Моделью Djoser Modelserializer является User.
Дочерний сериализатор, который я реализую, представляет собой другую модель, Customer.Так можно было бы сделать:

Код: Выделить всё

class CustomerSerializer(UserCreatePasswordRetypeSerializer):
class Meta:
model=Customer
fields = ('customer_name',)+UserCreatePasswordRetypeSerializer.Meta.fields
Когда я это делаю,
django жалуется, потому что в модели клиента нет полей модели, которые есть у пользователя.
это клиент модель, но эта модель в точности представляет эту модель.

Код: Выделить всё

 class Customer(models.Model):
customer_name = models.CharField(max_length=255)
user = models.ForeignKey(User,on_delete=models.CASCADE,related_name='user')
Решит ли эту проблему передача User в качестве родительского класса?

Код: Выделить всё

class Customer(User):
customer_name = models.CharField(max_length=255)
будет ли это работать с унаследованными ModelSerializers?
Поскольку Djoser — это приложение, я не могу изменить UserCreatePasswordRetypeSerializer в соответствии со своими потребностями.Я могу либо унаследовать это, либо
это второй подход, о котором я подумал.
создать что-то вроде,

Код: Выделить всё

class CustomerSerializer(serializers.ModelSerializer):

user=UserCreatePasswordRetypeSerializer
class Meta:
fields = ('customer_name','user')
поскольку это вложенный сериализатор, мне придется самому написать метод create.
проблема в том, как я могу вызвать создание UserCreatePasswordRetypeSerializer в метод create, который я реализую, потому что мне нужно использовать метод create UserCreatePasswordRetypeSerializer, поскольку он обрабатывает отправку электронных писем и все другие функции сериализатора. Поэтому я не могу просто извлечь проверенные данные пользователя и создать объект пользователя в методе создания CustomerSerializer следующим образом:

Код: Выделить всё

user_validated_data=validated_data.pop('user')
User.objects.create(**user_validated_data).
Мне нужно вызвать метод создания UserCreatePasswordRetypeSerializer, но поскольку я не наследую этот сериализатор, я не могу просто вызвать super().create(user_validated_data).
Опять же, я не могу его наследовать, потому что ребенок и родители представляют разные модели.

Подробнее здесь: https://stackoverflow.com/questions/786 ... rge-models

Вернуться в «Python»