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**

Вернуться на верх