有没有办法让 Django Restframework 允许空白数据

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)

Iva*_*hin 5

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)