ValidationError "значение должно быть десятичным числом"

У меня есть модель

class FunderProgramMember(models.Model):
buyer = models.IntegerField()
supplier = models.IntegerField()
discount_rate = models.DecimalField(max_digits=3, decimal_places=2)

В моем сериализаторе я пытаюсь получить поле скидки:

discount_rate = FunderProgramMember.objects.values('discount_rate').get(supplier=item.invoice.supplier_id, buyer=item.invoice.buyer)

Даже если я заменю свой фильтр "get(supplier=item.invoice.supplier_id, buyer=item.invoice.buyer)" на pk=2. я все равно получаю следующую ошибку валидации: [""{'discount_rate': Decimal('0.25')}" значение должно быть десятичным числом."]

Получается десятичное значение. Как исправить эту ошибку?

Если вы работаете с .supplier_id и buyer_id, то запрос будет успешным, так как поля являются IntegerFields. Скорее всего, остальная часть представления вызовет исключение.

Это происходит потому, что ваш discount_rate - это не объект Decimal, а словарь, содержащий этот элемент. Вы можете работать с .values_list(…, flat=True) [Django-doc] для получения скалярного результата:

discount_rate = FunderProgramMember.objects.values_list('discount_rate', flat=True).get(
    supplier=item.invoice.supplier_id, buyer=item.invoice.buyer
)

Далее я бы посоветовал работать с ForeignKeys вместо IntegerFields: ForeignKeys гарантирует ссылочную целостность и делает работу с Django ORM более удобной.

Вернуться на верх