Oma*_*ani 4 python django django-rest-framework
我有一个产品模型,我想要具有用户不需要的可选字段,每当我尝试输入空数据时,它都会向用户抛出错误 400,这意味着序列化数据无效
视图.py
def products(request):
if request.method == 'GET':
products = Product.objects.filter(user=request.user)
serializer = ProductSerializer(products, many=True)
return Response(serializer.data)
elif request.method == 'POST':
serializer = ProductSerializer(data=request.data)
serializer.initial_data['user'] = request.user.pk
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)
Run Code Online (Sandbox Code Playgroud)
序列化器.py
class ProductSerializer(serializers.ModelSerializer):
class Meta:
model = Product
fields = '__all__'
Run Code Online (Sandbox Code Playgroud)
模型.py
class Product(models.Model):
name = models.CharField(max_length=50)
description = models.TextField(blank=True)
price = models.FloatField()
quantity = models.IntegerField(blank=True)
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
shop = models.ForeignKey(Shop, on_delete=models.DO_NOTHING)
discount = models.FloatField(default=0)
Run Code Online (Sandbox Code Playgroud)
DRF 了解所需字段的方式是查看模型字段的选项null(文档)。
如果null=True,DRF 会将此字段视为不需要的字段
如果您不想在模型类中设置此选项,您可以通过required option使其在序列化器类中工作,例如
class ProductSerializer(serializers.ModelSerializer):
name = serializer.CharField(required=False)
class Meta:
model = Product
fields = '__all__'
Run Code Online (Sandbox Code Playgroud)