如何利用django通用视图?

时间:2014-03-19 13:11:52

标签: python html django web

例如,我想要一个页面,它允许用户为不同类别的商品添加数据。

像:

模型:类别是项目的外键

Category1(detail url): 
    Item 1(detail url):
        Date(textbox), Amount(textbox), Price(textbox)
    Item 2:
        ...
Category2:
...
Save button, add more button, etc...

由于这是一个例子,我在页面中显示的是什么。

我不介意用正常功能写硬件,但我想知道我是否可以利用这些观点,因为如果它们被大量介绍和开发,它们可能会很强大。那么为什么不利用呢?

有人可以告诉我如何使用它们的技巧,或者如果我们想要更多功能,我们就不应该使用它们吗?

2 个答案:

答案 0 :(得分:1)

Django的通用视图涵盖了很多常见的用例。例如:

  • CreateView - 用于创建模型实例的视图
  • UpdateView - 用于更新模型的现有实例的视图
  • DeleteView - 用于删除模型的现有实例的视图
  • DetailView - 用于显示模型的exsting实例的详细信息的视图
  • ListView - 用于显示模型实例列表的视图

如果您需要它们,还有更多,它们涵盖了您可能需要的大多数视图。您也可以非常轻松地扩展它们以满足您的需求。作为一般的经验法则,它们对于你可以多快地获得构建的内容产生了巨大的差异,我建议在默认情况下使用它们,并且只在绝对必要时切换到编写自己的视图。如果您尚未学习它们,我认为这样做将是您非常好的时间投入 - 您将花费很快的时间。对于很多视图类型,只是指定模型,设置URL和模板的情况,你就完成了。

如果您需要传递其他数据,则可以扩展相关的通用视图并覆盖get_context_data()方法。如果需要将相同的视图应用于多个不同的通用视图,则可以创建包含该方法的mixin并将其包含在该通用视图中。

对于包含表单的视图,如CreateView和UpdateView,如Drewness所说,你可以通过一个ModelForm实例告诉它使用什么形式,并且该表单本身可以被覆盖,所以你仍然有很多控制什么形式会做。例如,您可以定义以下格式:

from django.forms import ModelForm

class CategoryForm(ModelForm):
    exclude = ['date_created']

以下视图

from django.views.generic.edit import CreateView

class CategoryCreateView(CreateView):
    model = Category
    form_class = CategoryForm

Django教程covers generic views pretty well

答案 1 :(得分:1)

您可以将Django' ModelFormFormView一起使用。

然后,您的模型中的所有字段都将在您的表单和表单视图中提供。你还应该看看mixins。 Mixins允许您使用基于类的视图的组合。

最后,如果您想在视图中使用多个表单(模型),可以使用FormSet