使用基於 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
來更新該條目。