Django:如何使用 ModelForm 和通用视图

Django: How to use ModelForm and Generic Views

我正在学习Django

我不太清楚 Model FormGeneric Views 的用法。

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

生成 form

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

我应该使用 model form 还是 generic views 来获取用户的想法以及点赞和评论。

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

我想了解如何使用 django

的这个功能

通用视图和模型表单不是排他性的概念;通用视图包含特定功能的业务逻辑,而 ModelForms 创建表单、validation/data 清理逻辑和来自模型逻辑的 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'),
)