Извлечение информации о модели из первичного ключа в сериализаторах

У меня есть модель Favorites, которая отслеживает любимые NFT каждого users. Я хочу отображать фактические данные NFT вместо идентификатора NFT. Я не совсем уверен, как это сделать, поскольку возвращаются только первичные ключи.

модель

class Favorites(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    nft = models.ForeignKey(NFT, on_delete=models.CASCADE)

serializer

class FavoritesSerializer(serializers.ModelSerializer):
    class Meta:
        model = Favorites
        fields = "__all__"

Если вы просмотрите эту страницу немного дальше, вы наткнетесь на эту ссылку, и я отвечу быстро со ссылкой, поскольку вы кажетесь достаточно компетентным, чтобы понять, пока я строю правильный ответ.

Вложенные отношения в django rest framework ссылка:

https://www.django-rest-framework.org/api-guide/relations/#nested-relationships

В документации описано, что для того, чтобы отношения отображались, возвращая определенные поля, рекомендуется создать сериализатор для конкретного случая использования, который, в вашем случае

... дальнейший ответ здесь, который зависит от контекста ... Мне нужна модель NFT, пожалуйста ...

Например, в общем виде:

class NFTSerialiser(serializers.ModelSerializer):
    pass
    # add your specific fields

Затем вы можете использовать этот сериализатор в качестве поля вашего сериализатора Favourite, указав аргумент ключевого слова many=True

class FavoritesSerializer(serializers.ModelSerializer):
    nft_favourites = NFTSerialiser(many=True, read_only=True)
    class Meta:
        model = Favorites
        fields = "__all__"

Во-первых, что касается пагинации, пожалуйста, прочитайте этот раздел документации, он описывает, как создать свой собственный стиль пагинации, если вы решите это сделать:

https://www.django-rest-framework.org/api-guide/pagination/#modifying-the-pagination-style

Для полноты, возможно, вам понадобится или вы поймете, что вам нужно исключить поле NFT_set__id, которое объявляется неявно с помощью fields = "__all__" Meta declaration.

Альтернативно, я полагаю, что было бы лучше объявить ЭКСПЛИЦИТНО, что fields вы хотите, чтобы было отображено.

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