Python django休息框架柱';产品标识';不能为空

Python django休息框架柱';产品标识';不能为空,python,django,django-rest-framework,Python,Django,Django Rest Framework,我有这样一个视图,当使用post方法收到产品id时,我想在DB中保存一条记录 class PeymentAPIView(APIView): def post(self, request, *args, **kwargs): serilizer = PeymentSerializer(data=request.data) if serilizer.is_valid(): serilizer.save(user=request.use

我有这样一个视图,当使用post方法收到产品id时,我想在DB中保存一条记录

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
是只读字段。您需要将其替换为以发布产品标识数据:

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']