使用基于 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 来更新该条目。