首页 > 解决方案 > 在 JSON 响应中包含自动增量字段

问题描述

Django 和 Django Rest 的新手。

我正在寻找修改我的视图的 JSON 返回响应,以便它也返回创建的用户的 id。

事情是,id 是一个自动递增的整数,所以我不知道如何检索信息以将其添加到 JSON。

任何帮助,将不胜感激。

谢谢。

模型.py

class CustomUsers(AbstractUser):

    email = models.EmailField(unique=True)
    username = models.CharField(max_length=100)
    USERNAME_FIELD = 'email'

    class Meta:
        db_table = "custom_users"

序列化程序.py

class CustomUsersCreateSerializer(serializers.ModelSerializer):

    def create(self, validated_data):
        last_name = validated_data['last_name']
        first_name = validated_data['first_name']
        username = validated_data['username']
        email = validated_data['email']
        password = validated_data['password']
        user_obj = USER(
            last_name=last_name,
            first_name=first_name,
            username=username,
            email=email,
        )
        user_obj.set_password(password)
        user_obj.save()
        return validated_data
    class Meta:
        model = USER
        fields = ('id', 'last_name', 'first_name', 'username', 'password', 'email')
        extra_kwargs = {'password': {'write_only': True, 'min_length': 10}}

视图.py

class UserCreateAPIView(CreateAPIView):
    serializer_class = serializers.CustomUsersCreateSerializer
    queryset = CustomUsers.objects.all()

标签: djangodjango-rest-framework

解决方案


我通常Model.objects.create()用来添加新记录,但我认为这与您使用 save() 的方式相同,因此您可以在保存后获取创建的用户 ID:

def create(self, validated_data):
    last_name = validated_data['last_name']
    first_name = validated_data['first_name']
    username = validated_data['username']
    email = validated_data['email']
    password = validated_data['password']
    user_obj = User.objects.create(
        last_name=last_name,
        first_name=first_name,
        username=username,
        email=email,
    )
    user_obj.set_password(password)
    user_obj.save()
    validated_data['user_id'] = user_obj.id
    return validated_data

推荐阅读