Django:在get_context_data中设置初始值无法按预期工作

时间:2018-08-31 22:12:51

标签: django

我试图在基于类的视图中设置初始名称,以使用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(再次)

访问:/ repair / create / 3 文字输入包含:2

(依此类推)

我在这里做过明显错误的事情还是这是一种奇怪的错误?我基本上计划在网站上的其他地方使用URL,以便用户单击以加载此表单,从而用该URL中的已知信息填充表单。

1 个答案:

答案 0 :(得分:2)

initial是所有实例共享的类属性。您不应该修改它。

相反,您应该定义get_initial方法,并返回一个新字典:

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