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