Django Rest Framework вложенные сериализаторы AttributeError Объект 'RelatedManager' не имеет атрибута
Полная ошибка
Получена ошибка AttributeError при попытке получить значение для поля segments
на сериализаторе BackboneLineSerializer
.
Поле сериализатора может быть названо неверно и не соответствовать какому-либо атрибуту или ключу экземпляра RelatedManager
.
Оригинальный текст исключения был следующим: объект 'RelatedManager' не имеет атрибута 'segments'.
Я не могу понять, почему я получаю эту ошибку. Я использую, как мне кажется, точно такой же код в другом месте, и он работает. Единственное, о чем я могу думать, это то, что я мог изменить related_name в поле backbone_line модели BackboneLineSegments с чего-то другого на 'segments'. Все миграции были применены, и я не знаю, почему это могло вызвать проблемы. Может быть, база данных неправильно обновляет новое related_name? Я использую Postgres, если это имеет значение.
Модели
class BackboneLine(models.Model):
sub_area = models.ForeignKey(
SubArea,
on_delete=models.SET_NULL,
null=True,
related_name='backbone_lines')
source = models.ForeignKey(
Enclosure,
on_delete=models.SET_NULL,
null=True,
related_name='backbone_lines_out'
)
destination = models.OneToOneField(
Enclosure,
on_delete=models.SET_NULL,
null=True,
related_name='backbone_line_in'
)
@property
def label(self):
return f'{self.source.box_number} - {self.destination.box_number}'
class BackboneLineSegment(models.Model):
location = models.LineStringField()
buried = models.BooleanField(default=False)
backbone_line = models.ForeignKey(
BackboneLine,
on_delete=models.CASCADE,
related_name='segments'
)
@property
def long_lat(self):
return [list(coord_pair) for coord_pair in self.location]
@property
def lat_long(self):
return [(cords[1], cords[0]) for cords in self.location.coords]
Сериализаторы
class BackboneLineSegmentSerializer(GeoFeatureModelSerializer):
class Meta:
model = BackboneLineSegment
geo_field = 'location'
fields = ['location', 'buried']
class BackboneLineSerializer(ModelSerializer):
segments = BackboneLineSegmentSerializer(many=True)
class Meta:
model = BackboneLine
fields = ['label', 'segments']