繁体   English   中英

django rest 框架列“product_id”不能为空

[英]django rest framwork Column 'product_id' cannot be null

我有这个视图我想在使用 post 方法收到产品 ID 时在数据库中保存一条记录

class PeymentAPIView(APIView):

    def post(self, request, *args, **kwargs):
        serilizer = PeymentSerializer(data=request.data)
        if serilizer.is_valid():
            serilizer.save(user=request.user,
                           status=0)
            return Response("ok")
        else:
            #return Response(serilizer.errors)
             return Response(status=status.HTTP_400_BAD_REQUEST)

与邮递员一起,我用 post 方法发送这个:

{
    "product": 2
}

但我有这个错误你能告诉我为什么吗

(1048, "Column 'product_id' cannot be null")

这是我的序列化程序:

# product peyment
class PeymentSerializer(ModelSerializer):

    product = serializers.SerializerMethodField()
    def get_product(self, obj):
        return obj.product.product_id

    user = serializers.SerializerMethodField()
    def get_user(self, obj):
        return obj.id

    class Meta:
        model = Peyment
        fields = [
            'product',
            'status',
            'user',
            'transfer_id',
            'created_date',
            'updated_date',
        ]
        read_only_fields = ['user']

它是相关模型:

class Peyment(models.Model):
    product = models.ForeignKey(Product, on_delete=models.CASCADE, to_field='product_id',
                                related_name='product_peyment')
    status = models.CharField(max_length=30, null=True)
    user = models.ForeignKey(User, on_delete=models.DO_NOTHING)
    transfer_id = models.CharField(max_length=100, null=True, blank=True)
    created_date = models.DateTimeField(auto_now_add=True)
    updated_date = models.DateTimeField(auto_now=True)

SerializerMethodField是只读字段。 您需要将其替换为PrimaryKeyRelatedField以发布 product_id 数据:

class PeymentSerializer(ModelSerializer):
    product = serializers.PrimaryKeyRelatedField()

    user = serializers.SerializerMethodField()
    def get_user(self, obj):
        return obj.id

    class Meta:
        model = Peyment
        fields = [
            'product',
            'status',
            'user',
            'transfer_id',
            'created_date',
            'updated_date',
        ]
        read_only_fields = ['user']

由于PrimaryKeyRelatedField是关系的默认字段,您可以删除显式定义。 用户字段相同:

class PeymentSerializer(ModelSerializer):

    class Meta:
        model = Peyment
        fields = [
            'product',
            'status',
            'user',
            'transfer_id',
            'created_date',
            'updated_date',
        ]
        read_only_fields = ['user']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM