Django Rest框架使用源代码访问不同的反向关系模型?

2024-05-13 01:04:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下问题,我有默认的用户模型和配置文件模型。我想将它们合并到一个序列化程序中,但没有嵌套-这太难看了。相反,我希望所有字段都位于第一级。所以我创建了以下内容(为了简单起见,profile只包含一个Bool字段和一个relation字段):

class UserSerializer(serializers.ModelSerializer):
    achievements = serializers.PrimaryKeyRelated(many=True, queryset=Achievements.objects.all())
    trusted = serializers.BooleanField()

    def create(self, validated_data):
        user=User.objects.create_user(
            password = validated_data['password'],
            username = validated_data['username'],
            email = validated_data['email'],
        )

        Profile.objects.update_or_create(user, defaults={
            'trusted': validated_data['trusted'],
            'achievements': validatd_data['achievements'],
            }
        )
        return user

    class Meta:
        model = User
        fields = ("id", "username", "email", "password", "trusted", "achievements"),
        read_only = ("id",)
        extra_kwargs = {
            'password': {
                'write_only': True,
            },
        }

配置文件通过包含models.OneToOneField实例的用户字段连接到用户。你知道吗

当我试图列出所有的概要文件时,我得到了一个错误,我需要指定source,但我不知道怎么做,文档中只提到了应该使用点符号的东西。你知道吗

谢谢。你知道吗


Tags: 用户模型dataobjectsemail配置文件createusername
1条回答
网友
1楼 · 发布于 2024-05-13 01:04:04

source是序列化程序字段的参数。你应该这样做:

class UserSerializer(serializers.ModelSerializer):
    achievements = serializers.PrimaryKeyRelated(many=True, queryset=Achievements.objects.all(), source='profile.achievements')
    trusted = serializers.BooleanField(source='profile.trusted')

    def create(self, validated_data):
        user=User.objects.create_user(
            password = validated_data['password'],
            username = validated_data['username'],
            email = validated_data['email'],
        )

        Profile.objects.update_or_create(user, defaults={
            'trusted': validated_data['trusted'],
            'achievements': validatd_data['achievements'],
            }
        )
        return user

相关问题 更多 >