Использование primarykeyrelated для post и string для вызова get в django rest framework

У меня есть модель, в которой некоторые поля являются внешним ключом к другой модели. Следовательно, при создании объекта этой модели я должен использовать первичный ключ, но при вызове get api мне нужно показать эти поля как поле, связанное со строкой. Как этого добиться?

Моя модель:

class Example(models.Model):

    tour = models.ForeignKey(
        Package,
        on_delete=models.CASCADE,
        null=True,
        related_name="example"
    )

    site = models.ForeignKey(
                                Destination,
                                on_delete=models.CASCADE,
                                null= True,
                                related_name= "example",
    )

    

    location = models.CharField(blank=True)
    /...........other fields........../

Мой сериализатор:

class ExampleSerializer(serializers.ModelSerializer):

    # tour = serializers.StringRelatedField()
    # site = serializers.StringRelatedField()

    class Meta:
        model = OnlineClass
        fields = ['id','tour','site','other fields.....']

    def to_representation(self, instance):
        data = super(ExampleSerializer, self).to_representation(instance)
        return data

Здесь при создании объекта примера мне нужно передать тур и сайт как идентификаторы, но при вызове метода list мне нужно показать оба поля как поля, связанные со строкой. Поскольку я определяю их как поля, связанные со строкой, как указано выше (позже закомментировано), я могу создать объект, но эти поля будут установлены как null. Я не хочу создавать еще один сериализатор. Как этого добиться?

Вам нужно поле slug related, которое можно использовать для указания id (или любого другого поля, которое вы хотите) вашего целевого отношения.

Что-то вроде :

tour= serializers.SlugRelatedField(
    read_only=True,
    slug_field='id'
)
Вернуться на верх