Извлечение информации о модели из первичного ключа в сериализаторах
У меня есть модель 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
вы хотите, чтобы было отображено.