Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何利用django通用视图?_Python_Html_Django_Web - Fatal编程技术网

Python 如何利用django通用视图?

Python 如何利用django通用视图?,python,html,django,web,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... 因为这是一个例子,我知道这些东西都显示在一个页面中

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

比如:

型号:类别是项目的外键

Category1(detail url): 
    Item 1(detail url):
        Date(textbox), Amount(textbox), Price(textbox)
    Item 2:
        ...
Category2:
...
Save button, add more button, etc...
因为这是一个例子,我知道这些东西都显示在一个页面中

我不介意用普通函数编写它们,但我想知道是否可以利用这些视图,因为如果它们被大量引入和开发,它们可能会很强大。那么为什么不利用它呢


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

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

  • CreateView-用于创建模型实例的视图
  • UpdateView-用于更新模型的现有实例的视图
  • DeleteView-用于删除模型的现有实例的视图
  • DetailView-用于显示模型现有实例详细信息的视图
  • ListView-用于显示模型实例列表的视图
如果你需要的话,周围还有很多,它们涵盖了你可能需要的大部分视图。您还可以很容易地扩展它们以满足您的需求。作为一个一般的经验法则,它们对构建内容的速度有着巨大的影响,因此我建议在默认情况下使用它们,并且只有在绝对必要时才切换到编写自己的视图。如果你还没有学会它们,我认为这样做将是对你时间的一次很好的投资——你将很快弥补所花的时间。对于许多视图类型,只需指定模型、设置URL和模板,就可以了

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

对于包含表单的视图,如CreateView和UpdateView,正如Drowness所说,您可以通过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教程。

您可以将Django的与

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


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

我读了这些文章,但可能还需要提示。就像在这个例子中,我们可以使用列表视图来列出所有类别,似乎我们也可以使用表单视图来填充数据,等等。我的意思是如何将这些视图组合在一起?继承?您所说的“将这些视图组合在一起”是什么意思?如果您指的是用于创建和编辑数据的视图,那么您可以做的是为该数据指定一个表单。您可以为视图创建一个表单并将其传递给通用视图,它将使用该表单。这个表单可以是一个ModelForm,它直接从model派生而来。我现在有点困惑。但我想我想到的是,ListView将获得一个对象列表,并传递给模板,然后呈现一个HttpResponse对象。而CreateView将获得一个对象,并呈现一个HttpResponse对象。我希望ListView的每个对象都有一个FormView,而我认为这两个进程是不兼容的,django将如何处理这些,这两个视图有两个例程,对吗?也许mixin会解决这个问题,我认为mixin是介于baseview和generic view之间的一个类。非常感谢您的努力。我想列出所有类别,对于每个类别,我想列出它的所有项目,每个项目都有一个表单来编辑它。