Django-REST-Framework: экземпляр ForeignKey не передается в validated_data - PullRequest
0 голосов
/ 12 сентября 2018

Я пытаюсь создать экземпляр, переопределяющий метод create и передающий экземпляр ForeignKey в данные, но это поле не включено в validated_data, переданный методу create.Как я могу передать это create ??

У меня есть эта модель.

class UserProfile(models.Model):
    name = models.CharField(verbose_name='Name', max_length=50)
    email = models.EmailField(verbose_name='Email')
    address = models.TextField(verbose_name='Address', null=True, blank=True)
    user = models.OneToOneField(User, verbose_name='User', on_delete=models.CASCADE)

А вот мой сериализатор.

class UserProfileSerializer(ModelSerializer):
    class Meta:
        model = UserProfile
        fields = '__all__'
        depth = 2

    def create(self, validated_data):
        print(validated_data)
        return UserProfile.objects.create(**validated_data)

Вот мой взгляд.

class UserRegisterView(APIView):
    def post(self, request, format=None, *args, **kwargs):
        name = request.data.get('name')
        email = request.data.get('email')
        password = request.data.get('password')
        address = request.data.get('address')

        if name and email and password:
            user = User.objects.create_user(username=email, password=password, email=email)

            request.data['user'] = user
            serializer = UserProfileSerializer(data=request.data)
            if serializer.is_valid():
                user_profile = serializer.save()

Несмотря на то, что я передаю объект User в сериализатор, он не включен в validated_data.Официальный документ предлагает создать еще один сериализатор для User модели и использовать его, но есть ли другой способ без создания этого сериализатора ??

1 Ответ

0 голосов
/ 12 сентября 2018

Вы можете передать его как дополнительный аргумент метода сохранения :

serializer = UserProfileSerializer(data=request.data)
if serializer.is_valid():
    user_profile = serializer.save(user=user)

Из документов:

Любые дополнительные аргументы ключевых слов будут включены в Аргумент validated_data при вызове .create () или .update ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...