如何在通用视图类中访问用户传递的对象?
在模板中,当用户点击链接时:
<td><a href="{% url 'update_peon' pk=item.pk %}"><button class="btn btn-warning">Edit</button></a></td>
这是urls.py:
url(r'^update_peon/(?P<pk>\d+)$', views.UpdatePeon.as_view(), name='update_peon'),
和我的观点:
class UpdatePeon(generic.UpdateView):
login_required = True
template_name = 'appform/Peons/peon_form.html'
model = Person
form_class = PersonForm
success_url = reverse_lazy('view_peons')
我想访问班级中的item.attr1
或至少item.pk
,以便我可以相应地更改模型和表单,例如:
class UpdatePeon(generic.UpdateView):
login_required = True
template_name = 'appform/Peons/peon_form.html'
if item['attr1'] == "Attribute1":
model = model1
form = model1Form
else:
etc
success_url = reverse_lazy('view_peons')
我知道如何在基于普通函数的类中执行此操作,或者即使我从头开始重写基于类的视图,但我也不想这样做。
答案 0 :(得分:2)
JSONObject js = new JSONObject(jsString);
你不能像这样把代码放在类体中。它在加载模块时运行,然后才能访问class UpdatePeon(generic.UpdateView):
if item['attr1'] == "Attribute1":
model = model1
form = model1Form
else:
...
。
您应该覆盖特定方法。例如,您可以覆盖request
以更改视图使用的表单类。在视图中,您可以使用get_form_class
访问要更新的对象。
self.object
您可能会发现ccbv网站对于浏览update view methods非常有用。