Как сериализовать поле внешнего ключа в django rest framework

Я работаю над проектом с drf, где я получаю данные сериализатора следующим образом, что абсолютно нормально:

{
    "message": "Updated Successfully",
    "status": 200,
    "errors": {},
    "data": {
        "id": 8,
        "user": 2,
        "item": 1,
        "quantity": 4,
        "created_at": "2021-08-11T13:49:27.391939Z",
        "updated_at": "2021-08-11T13:51:07.229794Z"
    }
}

но я хочу получить следующее:

{
    "message": "Updated Successfully",
    "status": 200,
    "errors": {},
    "data": {
        "id": 8,
        "user": "user name",
        "item": "product name",
        "price: "3.44",
        "quantity": 4,
        "created_at": "2021-08-11T13:49:27.391939Z",
        "updated_at": "2021-08-11T13:51:07.229794Z"
    }
}

Я пробовал использовать drf RelatedField и PrimaryKryRelatedField, но во всех этих случаях мне нужно сделать соответствующие поля как read_only=True, которые я хочу пропустить.

Я также пробовал с depth = 1, который дает полную информацию

Пожалуйста, если кто-нибудь может помочь, буду очень признателен. Спасибо

Вы можете воспользоваться to_representation()

Попробуйте

class CartSerializer(serializers.ModelSerializer):

    class Meta:
        model = Cart

    def to_representation(self, instance):
        representation = dict()
        representation["id"] = instance.id
        representation["user"] = instance.user.username
        representation["item"] = instance.item.name
        representation["quantity"] = instance.quantity
        representation["created_at"] = instance.created_at
        representation["updated_at"] = instance.updated_at

        return representation

NB: Возможно, вам придется изменить instance.field_name(s) соответствующим образом

Вернуться на верх