Использование 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'
)