【发布时间】:2018-11-03 09:24:17
【问题描述】:
如何在通用视图类中访问用户传递的对象?
在模板中,当用户点击链接时:
<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')
我知道如何在基于普通函数的类中执行此操作,或者即使我从头开始重写基于类的视图,但我不想这样做。
【问题讨论】:
-
不清楚为什么要更改
model之后你有项目。model用于获取项目。 -
@Alasdair 好吧,我需要更改模型,因为:假设我有一个
Parent模型,其名称和类别作为字段。对于每个category,我都有一个子模型。用户点击edit,我需要为他显示适当的child form,因为所有子表单都显示在同一个视图中。 -
听起来你需要覆盖
get_object。拥有物品后设置self.model没有意义,因为之后不再使用self.model。
标签: python django django-views django-class-based-views