фильтр наборов запросов между 2 значениями с первыми ключами? - PullRequest
0 голосов
/ 28 мая 2019

У меня проблемы со следующим набором запросов, я проверяю его в оболочке django, и он возвращает пустой список.

Ситуация такова, что я занимаю ключ выше, я сделал то же упражнение с моделью"Tarifa_Sem" и возвращает значение без проблем, просто замените F ('') на переменную x = 1000

Ситуация такова, что таблица модели "Tarifa_Sem" предназначена только для ознакомления.

Где я собираюсь управлять и сохранять ответ набора запросов в модели "Calculadora_isr"

Модель 1

class Tarifa_Sem(models.Model):
limite_inferior_isr = models.DecimalField(max_digits=10, decimal_places=2)
limite_inferior_subsidio = models.DecimalField(max_digits=10, decimal_places=2)
limite_superior = models.DecimalField(max_digits=10, decimal_places=2)

Модель 2

class Calculadora_isr(models.Model):
tarifa = models.ForeignKey(Tarifa_Sem, on_delete=models.CASCADE, blank=True)
base_gravada = models.DecimalField(max_digits=10, decimal_places=2, blank=True)
limite_inf_calculo = models.DecimalField(max_digits=10, decimal_places=2, blank=True)

Queryset and save ()

def limite_inferior(self):
    queryset = Calculadora_isr.objects.filter(tarifa__limite_superior__gte=F('base_gravada'),tarifa__limite_inferior_isr__lte=F('base_gravada')).distinct().values('tarifa__limite_inferior_isr')
    return queryset

def save(self):
    self.limite_inf_calculo = self.limite_inferior
    super (Calculadora_isr, self).save()

В оболочке django список выглядит пустым.

>>> queryset = Calculadora_isr.objects.filter(tarifa__limite_superior__gte=F('base_gravada'),tarifa__limite_inferior_isr__lte=F('base_gravada')).distinct().values('tarifa__limite_inferior_isr')

А в админе, когда я даю ему сохранение, он говорит мне:

преобразование из метода в десятичное не поддерживается

спасибо за поддержку

1 Ответ

0 голосов
/ 29 мая 2019

Я наконец нашел решение.

Чтобы решить проблему с передачей поля base_gravada, используйте другую переменную, которая возвращает все значения base_gravada

qs1 = Calculadora_isr.objects.values_list('base_gravada')

И в моем втором запросе используйте переменную qs1:

qs2 = Tarifa_Sem.objects.filter(limite_superior__gte=qs1,limite_inferior_isr__lte=qs1).distinct().values('limite_inferior_isr')
...