Я только начал использовать фреймворк django rest, и это может быть старый вопрос, но до сих пор я не нашел для него правильного ответа на SO.Django REST: Объедините две модели
Я хочу добавить дополнительные поля профиля в существующую модель пользователя, предоставленную DRF. Прочитав документ, я решил создать новую модель CustomUser и связать ее с моделью пользователя по умолчанию с помощью внешнего ключа.
Вопрос возник, когда я пытался сериализовать модель CustomUser. Я хочу быть JSON как это:
{
"username" : "from_default_user_model",
"extra_field" : "from_custom_user_model"
}
, но с использованием вложенных сериализаторов следующим образом, я получил вложенное представление JSon.
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('username',)
class CustomUserSerializer(serializers.ModelSerializer):
user = UserSerializer()
class Meta:
model = CustomUser
fields = ('extra_field',)
вложенные один выглядит следующим образом:
{
"username" : "from_default_user_model",
"user" :
{
"extra_field" : "from_custom_user_model"
}
}
То, что я хочу, это свой рода как база данных соединения между двумя таблицами, которые просто дают простую таблицу, а не вложенная один. Как я мог это достичь?
Это решает мою проблему, но указание типа каждого поля снова может быть немного утомительным, особенно если вы не уверены в исходном типе поля. Например, вам нужно указать 'last_login = serializer.DateTimeField (source = 'user.last_login')', а не 'DateField (source = 'user.last_login')'. Последнее даст вам отказ от утверждения. – AveryLiu
Да, это может быть утомительно, но вы сделаете это только для модели пользователя, поэтому это не слишком большая работа. –