在将第一组信息分配给上下文的数据变量时,为什么会不断出现键盘错误?

时间:2019-05-18 01:28:35

标签: python django dictionary

尝试将字典添加到django的get_context_data的上下文变量中的列表时,会遇到键盘错误。

      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': '2019-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 个答案:

答案 0 :(得分:1)

为什么KeyError

在您的for循环中,您将 info 字典分配给名为 data 的键,该键不是键属于 context

因此,请在 list 字典中创建一个 context

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