簡體   English   中英

Django-REST-Framework:ForeignKey實例未傳遞到validated_data

[英]Django-REST-Framework: ForeignKey instance is not passed to validated_data

我正在嘗試創建一個覆蓋create方法的實例,並在數據中傳遞ForeignKey實例,但是該字段未包含在傳遞給create方法的validated_data 我怎樣才能通過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模型創建另一個序列化器並使用它,但是還有其他方法可以不創建該序列化器嗎?

您可以將其作為save方法的附加參數傳遞:

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

從文檔:

調用.create()或.update()時,任何其他關鍵字參數都將包含在validated_data參數中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM