我有一個產品模型,我想要有用戶不需要的可選欄位,每當我嘗試輸入空資料時,它都會向用戶拋出錯誤 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)
序列化程式.py
class ProductSerializer(serializers.ModelSerializer):
class Meta:
model = Product
fields = '__all__'
模型.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)
uj5u.com熱心網友回復:
DRF 了解所需欄位的方式是查看模型欄位的選項null(稱為( docs ))。
如果null=True,DRF 將根據不需要處理此欄位
如果您不想在模型的類中設定此選項,則可以通過required option使其在序列化器類中作業,例如
class ProductSerializer(serializers.ModelSerializer):
name = serializer.CharField(required=False)
class Meta:
model = Product
fields = '__all__'
uj5u.com熱心網友回復:
您必須明確指定欄位并添加required=false如下:
class ProductSerializer(serializers.ModelSerializer):
# We make the description field empty
description = serializers.CharField(max_length=200, required=False)
class Meta:
model = Product
fields = ['name', 'description', 'user' , 'shop' ...] # Each field you want in the response.
# Or you can use extra_kwargs since DRF 3.12.x
extra_kwargs = {"description": {"required": False, "allow_null": True}}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/367926.html
下一篇:下拉欄位未顯示選定的保存值
