Django Test Case Failing: Функция не возвращает ожидаемую сумму связанных полей модели
Я работаю с Django 4.2.2, и у меня есть тестовый пример, который терпит неудачу, потому что пользовательская функция не возвращает ожидаемую сумму связанных полей модели.
вот мой тест:
class UnitaImmobiliareModelTest(TestCase):
def setUp(self):
self.user = User.objects.create_user(username='UtenteTest', password='testing')
self.studio = Studio.objects.create(
nome_studio="Studio Test",
utente_creatore_studio=self.user
)
self.commessa = Commesse.objects.create(
anno=timezone.now(),
nome_commesse="Commessa Test",
numero_commesse="0001",
descrizione="Descrizione della commessa",
somme_utilizzabili=10000,
tipo_committente=True,
utente_creatore=self.user,
studio_associato=self.studio,
utente_permesso=True
)
self.preventivoCommessaFase = PreventivoCommessaFase.objects.create(
codice="0001",
nome="test",
descrizione="testing",
commessa=self.commessa,
costi=2.00,
)
self.fasiPrestazionali = FasiPrestazionali.objects.create(
nome_fase="test001",
costo=3,
preventivi_commessa = self.preventivoCommessaFase
)
self.unitaImmobiliare1 = UnitaImmobiliare.objects.create(
codice="0002",
descrizione="test",
latitudine=2.2,
longitudine=1.2,
utente_creatore_unita=self.user,
preventivi_fase=self.preventivoCommessaFase
)
self.unitaImmobiliare2 = UnitaImmobiliare.objects.create(
codice="0003",
descrizione="test",
latitudine=2.2,
longitudine=1.2,
utente_creatore_unita=self.user,
preventivi_fase=self.preventivoCommessaFase
)
def test_calcola_spesa_totale(self):
expected_spesa_totale = Decimal('4.00')
result = calcola_spesa_totale(self.preventivoCommessaFase)
self.assertEqual(result, expected_spesa_totale)
я пытаюсь протестировать функцию "calcola_spesa_totale" :
print(f"QuerySetData: {computi}")
print(computi[1].preventivi_fase.costi)
totali_unita_immobiliari = (
computi.values("descrizione")
.annotate(totale_costo=Sum(Cast("preventivi_fase__costi", FloatField())))
.order_by("descrizione")
)
print(f"somma totale: {totali_unita_immobiliari}")#asd
spesa_totale = sum(
Decimal(item["totale_costo"] or 0) for item in totali_unita_immobiliari
)
print(f"Spesa Totale Calcolata: {spesa_totale}") #asd
return spesa_totale`
` Проблема в том, что к тому времени, когда я перехожу в эту функцию, ошибка уже произошла, а это значит, что значение preventivi_fase.costi уже было установлено в 0.0 По моим данным, это происходит внутри модели PreventivoCommessaFase def totale_fasi
это другая модель FasiPrestazionali, содержащая fk:
class FasiPrestazionali(models.Model):
nome_fase = models.CharField(max_length=150)
descrizione = models.TextField(null=True, blank=True)
data_termine = models.DateField(null=True, blank=True)
giorni_preavviso = models.IntegerField(blank=True, null=True)
pratica_boolean = models.BooleanField(default=False, null=True)
documenti = models.FileField(null=True, blank=True, upload_to="app/fasi_documenti/")
foto = models.ImageField(null=True, blank=True, upload_to="app/fasi_foto/")
costo = models.FloatField(null=True, blank=True)
preventivi_commessa = models.ForeignKey(
"PreventivoCommessaFase",
on_delete=models.SET_NULL,
null=True,
blank=True,
related_name="preventivi_commessa_fase",
)
completata = models.BooleanField(
default=False
) # Nuovo campo booleano 'completata' con valore di default False
unita_immobiliare_fase = models.ForeignKey(
"UnitaImmobiliare",
on_delete=models.SET_NULL,
null=True,
blank=True,
related_name="unita_immobiliare_fase",
)
ordine = models.IntegerField(default=0) # Nuovo campo per l'ordine
def __str__(self):
return self.nome_fase
** Я пробовал создавать preventivoCommessaFase после fasiPrestazionali или назначать fk перед созданием связанного метода. и, честно говоря, я также пробовал много других вещей, но я уже не помню. Пожалуйста, помогите, это сводит меня с ума. SOS
Вот что я предполагаю, что это проблема: totale_fasi**