python - django rest 框架:如何使用相关字段验证序列化程序中的规则
问题描述
我有这些模型:
产品.py
class Product(models.Model):
product_title = models.CharField(max_length=100)
product_price = models.DecimalField(max_digits=12, decimal_places=2)
product_multiple = models.PositiveIntegerField(blank=True, null=True)
order_item.py
class OrderItem(models.Model)
order = models.ForeignKey(Order, on_delete=models.CASCADE, related_name='items', null=True, blank=True)
product = models.ForeignKey(Product, on_delete=models.CASCADE)
price = models.FloatField(default=0)
quantity = models.BigIntegerField(default=1)
profitability = models.CharField(max_length=50, null=True, blank=True)
我想验证serializers.py
是否order_item.quantity % product_multiple != 0
序列化程序.py
class OrderItemSerializer(serializers.ModelSerializer):
class Meta:
model = OrderItem
fields = ('id', 'order', 'product', 'price',
'quantity', 'profitability')
def validate_quantity(self, value):
data = self.get_initial()
quantity = data.get("quantity")
# This is where the `product.product_multiple` value is needed
if int(quantity) % product.product_multiple != 0:
raise serializers.ValidationError("Quantity is not multiple")
return value
如何获得product_multiple
validate 函数内部的实际值?
解决方案
当您进行涉及多个字段的验证时,您应该使用validate方法,如下所示:
def validate(self, data):
quantity = data.get('quantity')
product = data.get('product')
if int(quantity) % product.product_multiple != 0:
raise serializers.ValidationError("Quantity is not multiple")
return value
推荐阅读
- php - 是否有任何解决方案可以替换此代码以设置自定义徽标?
- c - C标准:结构和联合说明符:“适当转换”的确切定义是什么?
- excel - 如果单元格包含字符串,Excel VBA删除行
- apache-kafka - 是否可以访问在 OpenShift 上安装了 Route 侦听器类型的 Strimzi Kafka 中的 Zookeeper?
- reactjs - 使用 react-monaco-editor 生成构建时出现意外令牌错误
- selenium - ChromeDriver 访问麦克风/摄像头进行硒测试
- javascript - UnhandledPromiseRejectionWarning:TypeError:crypto.subtle.digest 不是函数
- audio - 线路输入到扬声器/耳机怪异
- .net - 尽管不允许 XML,但 Web Api XXE(Xml eXternal Entity) 注入
- javascript - 从 Array 中对对象进行分组的更好方法