Значение внешнего ключа в Django REST Framework

models.py:

class Station(models.Model):
    station = models.CharField()

class Flat(models.Model):
    station = models.ForeignKey(Station, related_name="metro")
    # another fields

Затем в serializers.py:

class StationSerializer(serializers.ModelSerializer):
    station = serializers.RelatedField(read_only=True)

    class Meta:
        model = Station


class FlatSerializer(serializers.ModelSerializer):
    station_name = serializers.RelatedField(source='station', read_only=True)

    class Meta:
        model = Flat
        fields = ('station_name',)

И у меня есть ошибка:

NotImplementedError: RelatedField.to_representation() должен быть реализован. Если вы обновляете среду REST версии 2, вам может понадобиться ReadOnlyField.
Я читал этот, но это мне не помогает.
Как это исправить?
Спасибо!

Ответ 1

RelatedField - базовый класс для всех полей, которые работают с отношениями. Обычно вы не должны использовать его, если вы не подклассифицируете его для настраиваемого поля.

В вашем случае вам вообще не требуется связанное поле. Вы ищете только одно-единственное представление внешнего ключа, поэтому вы можете просто использовать CharField.

class StationSerializer(serializers.ModelSerializer):
    station = serializers.CharField(read_only=True)

    class Meta:
        model = Station


class FlatSerializer(serializers.ModelSerializer):
    station_name = serializers.CharField(source='station.name', read_only=True)

    class Meta:
        model = Flat
        fields = ('station_name', )

Вам также требуется name объекта Station в вашем FlatSerializer. Вы должны указать source точное поле, поэтому я обновил его до station.name для вас.