Python django休息框架柱';产品标识';不能为空
我有这样一个视图,当使用post方法收到产品id时,我想在DB中保存一条记录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
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']