Django:如何使用ModelForm和Generic Views

时间:2016-06-27 05:54:56

标签: python django model views

我正在学习Django

我对Model FormGeneric Views的使用感到困惑。

虽然两者都不同但我理解的是两者都可以根据给定form生成model class

我有一个不同的表来存储想法,喜欢,评论和标签。

我是否应该使用model formgeneric views来获取用户和喜欢和评论的想法。

我也想自定义表单的布局,那么对我来说更好的方法是什么?

我想了解如何使用django

的这些功能

1 个答案:

答案 0 :(得分:2)

通用视图和模型表单不是排他性概念;通用视图包含特定函数的业务逻辑,而ModelForms从模型的逻辑创建表单,验证/数据清理逻辑和CRUD功能。

通过下面的示例(来自docs),UpdateView(作为Django的一部分提供的通用视图)从单个模型实例创建模型表单。通过CBV约定,要更新的实例的主键应该是url提供的第一个位置参数。

在这种情况下,会自动生成ModelForm。当需要更细粒度的控制时,您可以定义自己的ModelForm并将其提供给CBV。希望这有助于消除您的困惑。

示例myapp / views.py:

from django.views.generic.edit import UpdateView
from myapp.models import Author
from django import forms


class MyModelForm(forms.ModelForm):
    model = Author
    fields = ['name', 'city', ...]


class AuthorUpdate(UpdateView):
    model = Author
    form = MyModelForm
    template_name_suffix = '_update_form'

示例myapp / author_update_form.html:

<form action="" method="post">{% csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="Update" />
</form>

示例myapp / urls.py

from django.conf.urls import *
from myapp.views import AuthorUpdate

urlpatterns = patterns('',
    url('^update_author/(?P<pk>[\w-]+)$', AuthorUpdate.as_view(), name='update_author'),
)