django rest framework: как проверить правило в сериализаторах, используя связанное поле - PullRequest
0 голосов
/ 12 марта 2019

У меня есть эти модели:

product.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:

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

serializers.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")
    if int(quantity) % *product.product_multiple* != 0:
        raise serializers.ValidationError("Quantity is not multiple")
    return value

Как я могу получить фактический product_multiple внутри функции проверки?

1 Ответ

1 голос
/ 12 марта 2019

Поскольку вы выполняете проверку, включающую несколько полей, вы должны использовать метод 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...