Django ORM Как запрашивать и получать значения при выполнении нескольких условий
У меня есть следующая модель
class TimePeriod(BaseModel):
product = models.ForeignKey(to=Product, on_delete=models.CASCADE)
min_travel_days = models.PositiveIntegerField()
max_travel_days = models.PositiveIntegerField()
value = models.DecimalField(max_digits=19, decimal_places=10)
is_business = models.BooleanField()
insurance_period_min_days = models.PositiveIntegerField(
null=True, blank=True)
insurance_period_max_days = models.PositiveIntegerField(
null=True, blank=True)
и модель продукта такая
class Product(BaseModel):
name = models.CharField(max_length=255)
У меня есть следующий лист для расчета min_days и max_days и страховки min max days.
Insurance_period | Travel days | Value |
---|---|---|
1-92 days | 1-30 days | 30 |
1-183 days | 1-90 days | 45 |
1-365 days | 1-90 days | 50 |
1-365 days | 1-180 days | 60 |
Моя проблема заключается в том, что, предположим, у меня есть 29 дней в качестве дней путешествия и 90 дней в качестве дней страхования Как мне вычислить значение с помощью запроса django? Так как фактическое значение для 90 дней страховых дней и 29 дней путешествия составляет 30
.
Я пробовал делать так
TimePeriod.objects.filter(is_business=True,product__name='silver',insurance_period_min_days__lte=90,insurance_period_max_days__gte=90,
min_travel_days__lte=29,max_travel_days__gte=29).values('value').first()
Я получаю 4 разных результата, так как мой запрос удовлетворяет всем условиям вышеприведенной таблицы, как я могу сделать, чтобы удовлетворить условие вышеприведенной таблицы? чтобы получить 30 как значение?
Я думаю, что получил ответ, которого мне не хватало.
TimePeriod.objects.filter(is_business=True,policy__slug='silver',insurance_period_min_days__lte=91,insurance_period_max_days__gte=91,min_days__lte=30,max_days__gte=30).values('value').order_by('value').first()