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
, то запрос будет успешным, так как поля являются IntegerField
s. Скорее всего, остальная часть представления вызовет исключение.
Это происходит потому, что ваш 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
)
Далее я бы посоветовал работать с ForeignKey
s вместо IntegerField
s: ForeignKey
s гарантирует ссылочную целостность и делает работу с Django ORM более удобной.