Beim Erstellen einer verwandten Instanz kann einer FK-Beziehung keine gültige Instanz zugewiesen werden


JSRB

Ich habe die folgenden verwandten Modelle

class Period(models.Model):
    """
    A table to store all periods, one period equals a specific month
    """
    period = models.DateField()

    def __str__(self):
        return f'{self.period}'


class Payment(models.Model):
    """
    A table to store all payments derived from an offer
    """
    # Each monthly payment relates to an offer
    offer = models.ForeignKey(Offer, on_delete=models.CASCADE)
    month = models.ForeignKey(Period, on_delete=models.CASCADE)
    amount = models.PositiveIntegerField()
...

for key, value in payments.items():
    
    period = Period.objects.get_or_create(period=key)
    print(period)

    Payment.objects.create(
        offer=offer_instance,
        month=period,
        amount=value
    )

was hebt

ValueError: „(<Period: 2022-05-01>, False)“ kann nicht zugewiesen werden: „Payment.month“ muss eine „Period“-Instanz sein.

obwohl print(period)zurück

(<Zeitraum: 01.05.2022>, falsch)

Was für mich sieht aus wie eine gültige Instanz?

Willem van Onsem

.get_or_create(…) [Django-doc] gibt ein 2-Tupel mit dem abgerufenen/erstellten Element als erstem Element und als zweitem Element einen booleschen Wert zurück, der angibt, ob es erstellt wurde. Sie sollten also das 2-Tupel entpacken mit:

for key, value in payments.items():
    period, __ = Period.objects.get_or_create(period=key)
    Payment.objects.create(
        offer=offer_instance,
        month=period,
        amount=value
    )

Verwandte Artikel