Django UpdateView泛型类

时间:2018-05-24 08:24:29

标签: python django django-views django-class-based-views

如何在通用视图类中访问用户传递的对象?

在模板中,当用户点击链接时:

<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')

我知道如何在基于普通函数的类中执行此操作,或者即使我从头开始重写基于类的视图,但我也不想这样做。

1 个答案:

答案 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非常有用。