Фреймворк Django Rest, сериализатор по умолчанию для поля внешнего ключа

#django #django-rest-framework

#django #django-rest-framework

Вопрос:

Предположим, у пользователя есть адрес в качестве внешнего ключа

Типичное PrimaryKeyRelatedField будет представлять внешний ключ по идентификатору:

 {

   id: 3,
   first_name: eugene,
   last_name: kim,
   address: 9  # here 9 is address's id
}
 

Я хотел бы изменить представление поля внешнего ключа по умолчанию, измененное, как в следующем примере. (Надеюсь, без меня, определяющего сериализатор для каждого поля внешнего ключа)

 {
   id: 3,
   first_name: eugene,
   last_name: kim,
   address: {
     id: 9     # difference here,
   }
}   
 

Ответ №1:

Попробуйте это

 class MyPrimaryKeyRelatedField(PrimaryKeyRelatedField)

    def to_representation(self, value):
        if self.pk_field is not None:
            return self.pk_field.to_representation(value.pk)
        return {"id": value.pk}
 

Обновить

 class MyModelSerializer(serializers.ModelSerializer)
    serializer_related_field = MyPrimaryKeyRelatedField
 

Затем замените PrimaryKeyRelatedField на MyPrimaryKeyRelatedField и
serializers.ModelSerializer на MyModelSerializer

Комментарии:

1. Спасибо. PrimaryKeyRelatedField автоматически используется для поля внешнего ключа. Можно ли установить MyPrimaryKeyRelatedField в качестве поля сериализатора по умолчанию для внешних ключей?