django中的通用编辑视图(FormView、CreateView、UpdateView)

django框架 2020-01-10 1950

模型实例参考上一篇DetailView的讲解
forms.py

class ContactForm(forms.Form):
  name = forms.CharField()
  message = forms.CharField(widget=forms.Textarea) 

1.FormView

from django.views.generic.edit import FormView  
from .forms import ContactForm

class ContactView(FormView):  
    """  
    FormMixin类  
    显示表单的视图。错误时,重新显示带有验证错误的表格;成功后,重定向到新的URL。  
    """  
    template_name = 'contact.html'  
    form_class = ContactForm  # form表单类  
    success_url = '/book/book_list/'  
    initial = {"name": 'hy'}  # 为表单设置默认值  
    prefix = '123'  # 一般用于同一Form区别namespace用,设置后id字段,label的for字段改变  

    def form_valid(self, form):  
        form.send_email()  
        return super().form_valid(form)  

html:

 

<body>  
<form method="post">{% csrf_token %}  
    {{ form.as_p }}  
    <input type="submit" value="Send message">  
</form>  
</body>  

 

页面效果:

2.CreateView
一个视图,该视图显示用于创建对象的表单,重新显示带有验证错误的表单(如果存在)并保存该对象。
views.py

 

class BookCreate(CreateView):  
    """  

    由于父类都继承了FormMixin,TemplateResponseMixin,因此很多的方法,属性都相同  

    """  
    template_name = 'book4.html'  
    model = Book  
    fields = ['name', 'author', 'book_type', 'add_time']  
    # form_class = BookModelForm 通过form_class可以设置自定义内容,包括label,help_texts,error_message等,但是form_class与fieldsz不能同时存在
    success_url = '/book/book_list/'  

 

<body>    
<form method="post">{% csrf_token %}    
    {{ form.as_p }}    
    <input type="submit" value="Save">    
</form>    
</body>  

页面效果:

3.UpdateView
作用:该视图显示用于编辑现有对象的表单,重新显示带有验证错误的表单(如果有)并保存对对象的更改。这将使用从对象的模型类自动生成的表单(除非手动指定了表单类)
views

 

class BookUpdate(UpdateView):  
    """  

    该类必须要有一个pk或者slug来查询(会调用self.object = self.get_object())  

    """  
    model = Book  
    fields = ['name']  
    # template_name_suffix = '_update_form'  # html文件后缀  
    template_name = 'book_update_form.html'  
    success_url = '/book/book_list/' # 修改成功后跳转的链接  

 

html:

 

<body>  
<form method="post">{% csrf_token %}  
    {{ form.as_p }}  
    <input type="submit" value="Update">  
</form>  
</body>  

 

效果:

urls.py

 

path('book_update/<int:pk>', BookUpdate.as_view()),  

 

4.DeleteView
作用:显示确认页面并删除现有对象的视图。如果请求方法为POST,则只会删除给定的对象。如果通过来获取此视图的请求为GET,它将显示一个确认页面,该页面应包含一个张贴到相同URL的表单。
views

 

from django.urls import reverse_lazy # 带参数跳转    

class BookDelete(DeleteView):
  """
  """
  model = Book
  template_name = 'book_delete.html'
  # template_name_field = ''
  # template_name_suffix = ''
  # book_delete.html为models.py中__str__的返回值
   # namespace:url_name
  success_url = reverse_lazy('book:book_list') 

 

html:

<body>  
<form method="post">{% csrf_token %}  
    <p>Are you sure you want to delete "{{ object }}"?</p>  
    <input type="submit" value="Confirm">  
</form>  
</body>  

 

urls

path('book_delete/<int:pk>', BookDelete.as_view()),  

 

效果:

标签:django框架

文章评论

评论列表

已有1条评论