Невозможно присвоить действительный экземпляр отношению FK при создании связанного экземпляра

У меня есть следующие родственные модели

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
    )

что повышает

ValueError: Невозможно присвоить "(<Период: 2022-05-01>, False)": "Payment.month" должен быть экземпляром "Period".

.

хотя print(period) возвращается

(<Период: 2022-05-01>, Ложь)

что для меня выглядит как действительный экземпляр?

.get_or_create(…) [Django-doc] возвращает кортеж из двух элементов, первым из которых является элемент, который извлекается/создается, а вторым - булево число, указывающее, был ли он создан. Таким образом, вы должны распаковать этот кортеж следующим образом:

for key, value in payments.items():
    period, __ = Period.objects.get_or_create(period=key)
    Payment.objects.create(
        offer=offer_instance,
        month=period,
        amount=value
    )
Вернуться на верх