Проблема кверисетов шаблонов Django

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

def createCharacterSkills(request):
        
    user = request.user
      
    if user.is_authenticated and request.method=="GET":
        
        characterid = request.session["characterid"]
        print(characterid)
        
        characterrecord = character.objects.filter(pk=characterid)
        print(characterrecord.values())
            
        return render(request, "characters/createcharacter2.html", {'characterrecord':characterrecord})

Это то, что я передаю в свой шаблон. Ниже приведен соответствующий код в моем шаблоне:

                        <b>Name: </b>{{ characterrecord.values }} <br>
                        <b>Player Reference: </b>{{ characterrecord.id }}<br>

Словарь characterrecord.values работает правильно и возвращает весь словарь, как и ожидалось.

<QuerySet [{'id': 48, 'player_id': 1, 'character_name': 'Avalon', 'character_race': 'Dwarf', 'character_faction': 'Jhereg', 'character_group': 'Moredhel', 'ambidexterity': 0, 'dagger': 0, 'one_handed_weapon': 0, 'pole_arms': 0, 'projectile_weapons': 0, 'shield': 0, 'two_handed_weapons': 0, 'thrown_weapons': 0, 'wear_light_armour': 0, 'wear_medium_armour': 0, 'wear_heavy_armour': 0, 'wear_extra_heavy_armour': 0, 'body_development': 0, 'literacy': 0, 'surgeon': 0, 'numeracy': 0, 'alchemist': 0, 'crafting': 0, 'evaluate': 0, 'ranger_1': 0, 'ranger_2': 0, 'make_and_read_maps': 0, 'recongnise_forgery': 0, 'poison_lore_1': 0, 'posion_Lore_2': 0, 'potion_lore_1': 0, 'potion_lore_2': 0, 'ritual_contribute': 0, 'ritual_magic': 0, 'invocation': 0, 'corporeal_1': 0, 'corporeal_2': 0, 'mage_1': 0, 'mage_2': 0, 'shamanism_1': 0, 'shamanism_2': 0, 'forage': 0, 'meditation': 0, 'vet_ritual_magic': 0, 'vet_ritual_contribute': 0, 'chameleon': 0, 'fearless': 0, 'natural_armour': 0, 'sense_magic': 0, 'track': 0, 'intuition': 0, 'poison_resistance': 0, 'resist_magic': 0, 'sense_trap': 0, 'iron_will': 0, 'resist_disease': 0, 'discern_truth': 0, 'scrounge': 0, 'tricks_of_the_trade': 0, 'versatility': 0, 'regeneration': 0, 'extra_body_dev': 0}]>

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

Любая помощь будет очень признательна.

Переход через querysets вы не можете получить доступ к данным querysets напрямую

{% for character_record in characterrecord %}
     <b>Name: </b>{{ character_record.character_name}} <br>
     <b>Player Reference: </b>{{ character_record.player.id}}<br>
{% endfor %}

Вы имеете QuerySet словарей, поэтому в этом случае следует перечислить QuerySet.

Но здесь вы фильтруете по первичному ключу, поэтому вы можете получить единственный элемент:

from django.contrib.auth.decorators import login_required
from django.shortcuts import get_object_or_404

@login_required
def createCharacterSkills(request):
    characterrecord = get_object_or_404(character, pk=request.session['characterid'])
    return render(request, 'characters/createcharacter2.html', {'characterrecord': characterrecord})

нет необходимости использовать .values(…) [Django-doc]: используя объект модели, вы не стираете слой модели.


Примечание: Часто лучше использовать get_object_or_404(…) [Django-doc], чем использовать .get(…) [Django-doc] напрямую. В случае, если объект не существует, например, потому что пользователь сам изменил URL, get_object_or_404(…) приведет к возврату ответа HTTP 404 Not Found, тогда как использование .get(…) приведет к ответу HTTP 500 Server Error.


Примечание: Вы можете ограничить представления для аутентифицированных пользователей с помощью декоратора @login_required декоратора [Django-doc].

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