在创建方法中,序列化不保存生成的值。

# models.py
class clients(models.Model):
    client_id = models.CharField(max_length=8,unique=True, null=False, blank=True,primary_key=True)
    client_identity_id = models.IntegerField(unique=True, null=False, blank=False)
    ...


#serializer.py
class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = clients
        fields = ('client_identity_id','client_id','client_firstname','client_middlename','client_lastname','client_country','money','client_num')
        read_only_fields = ('money',)
        def create(self, validated_data, **kwargs):
            validated_data['client_id'] = ''.join(secrets.choice(string.ascii_uppercase + string.digits) 
                                                  for i in range(8))
            return clients.objects.create(**validated_data)


#views.py :
def post(self,request):
    data=request.data
    serializer = UserSerializer(data=data)
    if serializer.is_valid():
        serializer.save()

        return Response(serializer.data, status=status.HTTP_201_CREATED)
    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

当我提出一个帖子请求时,它应该生成一个独特的 client_id 但它一直是Null。

请帮助我使用包含的代码,而不是显示其他方法来设置值的 client_id. 谢谢你

解决方案:

我执行了同样的代码,工作正常。

serializer =UserSerializer(data={})
assert serializer.is_valid()
obj = serializer.save()
print(obj.client_id)
'6I2N4GC3'

从你的代码来看,看起来你 create 方法可能不会被调用,因为它在Meta内部缩进了。

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = clients
        fields = ...

        # Indented inside Meta
        def create(self, validated_data, **kwargs):

    # Should be sibling to Meta
    def create(self, validated_data, **kwargs):
        ...

给TA打赏
共{{data.count}}人
人已打赏
未分类

如何在同一网络的远程PC上开发react native?

2022-9-14 13:45:36

未分类

在Blazor中使用反射获取事件Action。

2022-9-14 13:45:38

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索