Я хотел бы знать, как я могу сохранить свой набор запросов в базе данных:
def data_min(self):
qs1 = Csr.objects.values_list('value_base')
qs2 = Modelb.objects.filter(Q(limit_a__gte=qs1) & (Q(limit_b__lte=qs1))).distinct().values_list('limit_b')
qs3 = qs2[0]
return qs3
Эта функция возвращает меня:
<QuerySet [(Decimal('133.22'),)]>
Теперь мой вопрос в том, как я сохраняю его в своей модели в поле «bdata_superior»:
class Csr(models.Model):
tarifa_cobro = models.ForeignKey(Tarifa_Sem, on_delete=models.CASCADE, null=True, blank=True)
value_base = models.DecimalField(max_digits=10, decimal_places=2, null=True, blank=True)
bdata_superior = models.DecimalField(max_digits=10, decimal_places=2, null=True, blank=True)
data_inferior = models.DecimalField(max_digits=10, decimal_places=2, null=True, blank=True)
class Modelb(models.Model):
limit_a = models.DecimalField(max_digits=10, decimal_places=2)
limit_b = models.DecimalField(max_digits=10, decimal_places=2)
Проблема в том, что когда я сохраняю его, я получаю следующую ошибку:
conversion from method to Decimal is not supported
def save(self, *args, **kwargs):
self.bdata_superior = self.data_min
super (Crs, self).save(*args, **kwargs)
Не могли бы вы уточнить вопрос?
Вы должны сохранить модель. Csr.objects.create(tarifa_cobro_id=1, bdata_superior=1.0, data_inferior=2.0)
Пожалуйста, поделитесь Modelb
определением. И вы хотите связать его с записью или значением поля внутри записи?
Я хочу перезаписать метод сохранения, чтобы сохранить его в поле «bdata_superior» класса Crs
qs2 = Modelb.objects.filter(Q(limit_a__gte=qs1) & Q(limit_b__lte=qs1)).distinct().values_list('limit_b')
убрал лишние скобки
Я продолжаю выдавать ту же ошибку
вызовите функцию data_min
, а затем сохраните, возвращаемое значение self.bdata_superior
, в настоящее время вы назначаете функцию self.bdata_superior
def save(self, *args, **kwargs):
self.bdata_superior = self.data_min()
super (Crs, self).save(*args, **kwargs)
Я только что проверил то, что вы сказали, и теперь я получаю сообщение об ошибке: Тип исключения: ValueError Значение исключения: аргумент должен быть последовательностью длины 3
можешь поставить трассировку стека? объяснить немного больше, например, из какой функции это происходит?
Я обновляю ответ на эту тему.
Сначала обновите мой qs2, ошибка показала мне это, потому что я пытался сохранить набор запросов, затем кортеж, чтобы получить доступ к значению моего набора запросов, просто добавьте параметр flat = True в метод values_list() и получите доступ к первому значение моего кортежа в позиции [0]
Вот моя обновленная функция
def data_min(self):
qs1 = Csr.objects.values_list('base_gravada')
qs2 = Modelb.objects.filter
(Q(limit_a__gte=qs1) &
Q(limit_b__lte=qs1))
.distinct().values_list('limit_b', flat=True)[0]
и метод сохранения
def save(self, *args, **kwargs):
self.bdata_superior = self.data_min()
super (Calculadora_isr, self).save(*args, **kwargs)
Большое спасибо за все @harshil9968
Этот сайт Stack Overflow доступен только на английском языке. Для других языков посетите другие сайты переполнения стека, такие как
https://es.stackoverflow.com/