代码之家  ›  专栏  ›  技术社区  ›  v25

Django:在get\u context\u data中设置initial没有按预期工作

  •  0
  • v25  · 技术社区  · 6 年前

    我试图在基于类的视图中设置initial,以预先填充name=description的文本输入

    下面的代码似乎接受url中指定的整数输入,并将其放在模板中我想要的位置。

    #urls.py
    urlpatterns += (
        path('repair/', views.RepairListView.as_view(), name='app_name_repair_list'),
        path('repair/create/<int:pk>', views.RepairCreateView.as_view(), name='app_name_repair_create'),
    )
    
    # views.py
    class RepairCreateView(CreateView):
        model = Repair
        form_class = RepairForm
    
        def get_context_data(self, **kwargs):
            context = super(RepairCreateView , self).get_context_data(**kwargs)
            self.initial['description'] = self.kwargs['pk']
    return context
    

    访问:/repair/create/1 文本输入包含:1

    访问:/repair/create/2 文本输入包含:1(再次)

    文本输入包含:2

    (以此类推)

    1 回复  |  直到 6 年前
        1
  •  2
  •   Daniel Roseman    6 年前

    initial 是一个类属性,由所有实例共享。你不应该修改它。

    相反,您应该定义 get_initial 方法,返回新词典:

    def get_initial(self):
        return {'description': self.kwargs['pk']}