Как получить идентификатор текущего пользователя в сериализаторе Django Rest Framework
У меня есть сериализатор, который получает дату товара из таблицы и данные инвентаризации из другой таблицы для пользователя, который вошел в систему. Я настроил сериализатор для получения данных о товаре и добавил поля, которые должны содержать данные о количестве запасов пользователя.
Запрос возвращает правильную структуру данных, однако он возвращал сумму запасов для всех пользователей, а затем терпел неудачу. Поэтому я попытался отфильтровать эти добавленные поля по идентификатору текущего пользователя, однако при добавлении происходит сбой.
Я хотел бы отфильтровать добавленные поля для инвентаря пользователя по идентификатору пользователя, который вошел в систему. Однако его добавление, похоже, нарушает запрос.
class CardsDataSerializers(serializers.ModelSerializer):
inventory = serializers.SerializerMethodField()
class Meta:
model = magic_set_cards
fields = ['id', 'name', 'rarity', 'manaCostList', 'convertedManaCost', 'colors', 'number', 'type', 'types', 'imageUri', 'promoTypes', 'hasFoil', 'hasNonFoil', 'inventory']
@staticmethod
def get_inventory(self, obj):
user_id = self.request.user.id
try:
standard = inventory_cards.objects.filter(user_id=user_id).filter(card_id=obj.id).values_list('standard').get()[0]
except inventory_cards.DoesNotExist:
standard = 0
try:
foil = inventory_cards.objects.filter(user_id=user_id).filter(card_id=obj.id).values_list('foil').get()[0]
except inventory_cards.DoesNotExist:
foil = 0
inventory = {
'standard': standard,
'foil': foil,
}
return inventory
Ошибка:
get_inventory() missing 1 required positional argument: 'request'
Request Method: GET
Request URL: http://127.0.0.1:8000/magic/sets/ss1/cards-data/?name=
Django Version: 3.2.7
Exception Type: TypeError
Exception Value:
get_inventory() missing 1 required positional argument: 'request'
измените функцию с
@staticmethod
def get_inventory(self, obj):
user_id = self.request.user.id
to
def get_inventory(self, obj):
user = self.context['request'].user