使用基于 Django 类视图的 Django 模型表
Django Model Form with Django Class Based view 是一种构建页面以在 django 应用程序中快速创建/更新操作的经典方法。在表单中我们可以放置方法来执行任务。它是一种更简洁的方式将任务放在表单中而不是放入视图/模型。
举一个使用 Django Model Form 的例子,首先我们需要定义我们的 Model。
class MyModel(models.Model):
name = models.CharField(
verbose_name = 'Name',
max_length = 255)
现在让我们使用这个模型制作一个表单:
class MyModelForm(forms.ModelForm):
class Meta:
model = MyModel
fields = '__all__'
让我们添加一个方法来打印 hello world。
class MyModelForm(forms.ModelForm):
class Meta:
model = MyModel
fields = '__all__'
def print_hello_world(self):
print('Hello World')
让我们制作一个模板来显示表格:
<form method="post" action="">
{% csrf_token %}
<ul>
{{ form.as_p }}
</ul>
<input type="submit" value="Submit Form"/>
</form>
现在我们将在三个不同的视图中使用此表单,这三个视图将分别创建和更新任务。
from django.views.generic.edit import CreateView, UpdateView
from myapp.models import MyModel
class MyModelCreate(CreateView):
model = MyModel
fields = ['name']
form_class = MyModelForm
template_name = 'my_template.html'
def form_valid(self, form):
# This method is called when valid form data has been POSTed.
# It should return an HttpResponse.
form.print_hello_world() # This method will print hello world in console
return super(MyModelCreate, self).form_valid(form)
class MyModelUpdate(UpdateView):
model = MyModel
fields = ['name']
form_class = MyModelForm
template_name = 'my_template.html'
现在让我们创建一个用于访问这些视图的 URL。
from django.conf.urls import url
from myapp.views import MyModelCreate, MyModelUpdate
urlpatterns = [
# ...
url(r'mymodel/add/$', MyModelCreate.as_view(), name='author-add'),
url(r'mymodel/(?P<pk>[0-9]+)/$', MyModelUpdate.as_view(), name='author-update')
]
好的,我们的工作已经完成。我们可以访问 url:localhost:8000/mymodel/add
来创建模型中的条目。还可以访问 localhost:8000/mymodel/1
来更新该条目。