django-rest-framework вызывает ошибку в модели при доступе к другой модели с внешним ключом - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть две модели, одна ссылается на другую:

class RatesTable(models.Model):
    hotel = models.ForeignKey(Hotel, on_delete=models.PROTECT, related_name='rates_tables', verbose_name=_('Hotel'))
    contract = models.ForeignKey(Contract, on_delete=models.PROTECT, null=True, blank=True, related_name='rates_tables', verbose_name=_('Contract'))
    name = models.CharField(max_length=100, verbose_name=_('Name'))
    description = models.TextField(null=True, blank=True, verbose_name=_('Description'))
    is_base = models.BooleanField(verbose_name=_('Is a base rate-table?'))
    start_date = models.DateField(null=True, blank=True, verbose_name=_('Start Date'))
    due_date = models.DateField(null=True, blank=True, verbose_name=_('Due Date'))
    release = models.IntegerField(verbose_name=_('Release'))

    class Meta:
        verbose_name = _('Rates Table')
        verbose_name_plural = _('Rates Tables')
        unique_together = ('contract', 'start_date', 'due_date')
        indexes = [
            models.Index(fields=['hotel',]),
        ]

    def __str__(self):
        return "[{}][{}]{} {} {}-{}".format(self.id, self.hotel.name, self.contract.id, self.name, self.start_date, self.due_date)

class Rate(models.Model):
    rates_table = models.ForeignKey(RatesTable, on_delete=models.PROTECT, related_name='rates', verbose_name=_('Rates Table'))
    product = models.ForeignKey(Product, on_delete=models.PROTECT, related_name='product_rates', verbose_name=_('Product'))
    rate = models.FloatField(verbose_name=_('Rate'))

    class Meta:
        verbose_name = _('Rate')
        verbose_name_plural = _('Rates')
        unique_together = ('rates_table', 'product')

    def __str__(self):
        return "[{}][{}][{}]{}".format(self.id, self.rates_table.contract, self.rates_table.id, self.product.name)

Каждый из них имеет свою собственную стандартную конечную точку в urls.py. Конечная точка для модели RatesTable работает отлично, но конечная точка для модели Rate вызывает эту ошибку: return "[{}][{}]{} {} {}-{}".format(self.id, self.hotel.name, self.contract.id, self.name, self.start_date, self.due_date) AttributeError: 'NoneType' object has no attribute 'id', и эта ошибка возникает при методе __str__(self) модели RatesTable, а не модели Rate!

Я не знаю, почему DRF вызывает ошибку в указанной модели. Это единственный случай, и у меня много моделей с внешними ключами

...