У меня есть две модели, одна ссылается на другую:
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 вызывает ошибку в указанной модели. Это единственный случай, и у меня много моделей с внешними ключами