猿问

序列化对象时不显示 DRF 外键字段

我有几个模型来代表用户。用户有一个花园、一个个人资料和一个gardener_profile。序列化用户对象时,会显示花园和个人资料,但不会显示gardener_profile。它们都是一对一的关系。在我的 swagger 文档中,gardener_profile 被识别,但在响应对象中未被识别。

这是序列化器:

class WorkingHoursSerializer(serializers.ModelSerializer):

    gardener_profile = serializers.StringRelatedField(read_only=True)


    class Meta:

        model = WorkingHours

        fields = '__all__'



class GardenSerializer(serializers.ModelSerializer):

    user = serializers.PrimaryKeyRelatedField(read_only=False, queryset=GardreamUser.objects.all())


    class Meta:

        model = Garden

        fields = ['id', 'url', 'grass', 'beds', 'terrace', 'tracks', 'entry', 'user']



class GardenerProfileSerializer(serializers.ModelSerializer):

    user = serializers.PrimaryKeyRelatedField(read_only=False, queryset=GardreamUser.objects.all())

    working_hours = WorkingHoursSerializer(many=True)


    class Meta:

        model = GardenerProfile

        fields = ['id', 'url', 'working_radius', 'salary', 'iban', 'contract', 'user', 'working_hours']


    def create(self, validated_data):

        working_hours_data = validated_data.pop('working_hours')

        gardener_profile = GardenerProfile.objects.create(**validated_data)

        for working_hour_data in working_hours_data:

            WorkingHours.objects.create(gardener_profile=gardener_profile, **working_hour_data)

        return gardener_profile



class UserProfileSerializer(serializers.ModelSerializer):

    user = serializers.StringRelatedField(read_only=True)


    class Meta:

        model = UserProfile

        fields = '__all__'



class UserSerializer(serializers.HyperlinkedModelSerializer):

    profile = UserProfileSerializer(required=True)

    garden = GardenSerializer(read_only=True)

    gardener_profile = GardenerProfileSerializer(read_only=True)


    class Meta:

        model = CustomUser

        fields = ['id', 'url', 'username', 'email', 'first_name', 'last_name', 'password', 'groups', 'profile',

                  'garden', 'gardener_profile']

        extra_kwargs = {'password': {'write_only': True}}


慕婉清6462132
浏览 105回答 1
1回答

大话西游666

我找到了解决方案:添加related_name='gardener_profile'到 GardenerProfile 的用户字段
随时随地看视频慕课网APP

相关分类

Python
我要回答