Django:如何使用 ModelForm 和通用视图
Django: How to use ModelForm and Generic Views
我正在学习Django
。
我不太清楚 Model Form
和 Generic 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'),
)
我正在学习Django
。
我不太清楚 Model Form
和 Generic 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'),
)