Почему я продолжаю получать ключевую ошибку при назначении первого набора информации переменной данных контексту?

Продолжайте получать keyerror при попытке добавить словарь в список в контекстной переменной для get_context_data для django.

def get_context_data(self, **kwargs): context = super(AdminPlayersView, self).get_context_data(**kwargs) context['form_add'] = self.get_form() context['form_edit'] = self.get_form() players = Players.objects.all().order_by("user__last_name") context['data'] = [] for player in players: info = { 'Name': player.full_name, 'DOB': player.user.dob, 'Gender': player.user.gender, 'Team': 'Something', } context['data'].append(info) return context 

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

`    __class__  
    <class 'Backend.views.AdminPlayersView'>
    context 
    {'data': {}}
    count   0
    info    {'DOB': 񟭓-01-01', 'Gender': 1, 'Name': 'Name', 'Team': 
    'Something'}
    kwargs  {}
    player  <Players: Players object (240)>
players 
<QuerySet [<Players: Players object (240)>, <Players: Players object (13)>, <Players: Players object (46)>, <Players: Players object (217)>, <Players: Players object (96)>, <Players: Players object (301)>, <Players: Players object (481)>, <Players: Players object (201)>, <Players: Players object (48)>, <Players: Players object (129)>, <Players: Players object (152)>, <Players: Players object (343)>, <Players: Players object (344)>, <Players: Players object (206)>, <Players: Players object (381)>, <Players: Players object (375)>, <Players: Players object (469)>, <Players: Players object (23)>, <Players: Players object (104)>, <Players: Players object (8)>, '...(remaining elements truncated)...']>
self    
<Backend.views.AdminPlayersView object at 0x078118D0>
edit:
'Name'
Request Method: GET
Request URL:    http://127.0.0.1:8000/admin//players
Django Version: 2.1.1
Exception Type: KeyError
Exception Value:    
'Name'

Всего 1 ответ


Почему KeyError ?

В цикле for вы присваиваете свою info dict ключу, называемому data который не является ключом, принадлежащим context .

Итак, создайте list в context dict как,

context['data'] = []

а затем добавить в этот список.


Полный пример кода

def get_serializer_context(self):
    context = super().get_serializer_context()
    context['data'] = []
    players = Players.objects.all().order_by("user__last_name")
    for player in players:
        info = {
            'Name': player.full_name,
            'DOB': player.user.dob,
            'Gender': player.user.gender,
            'Team': 'Something',
        }
        context['data'].append(info)
    return context

Есть идеи?

10000