通用編輯視圖¶
此頁面描述了以下視圖,並為編輯內容提供基礎
另請參閱
訊息框架 包含 SuccessMessageMixin
,方便顯示關於表單成功提交的訊息。
注意
此頁面上的一些範例假設在 myapp/models.py
中已定義了 Author
模型,如下所示
from django.db import models
from django.urls import reverse
class Author(models.Model):
name = models.CharField(max_length=200)
def get_absolute_url(self):
return reverse("author-detail", kwargs={"pk": self.pk})
FormView
¶
- class django.views.generic.edit.FormView¶
一個顯示表單的視圖。發生錯誤時,會重新顯示包含驗證錯誤的表單;成功時,會重新導向至新的 URL。
祖先 (MRO)
此視圖繼承了下列視圖的方法和屬性
範例 myapp/forms.py:
from django import forms class ContactForm(forms.Form): name = forms.CharField() message = forms.CharField(widget=forms.Textarea) def send_email(self): # send email using the self.cleaned_data dictionary pass
範例 myapp/views.py:
from myapp.forms import ContactForm from django.views.generic.edit import FormView class ContactFormView(FormView): template_name = "contact.html" form_class = ContactForm success_url = "/thanks/" def form_valid(self, form): # This method is called when valid form data has been POSTed. # It should return an HttpResponse. form.send_email() return super().form_valid(form)
範例 myapp/contact.html:
<form method="post">{% csrf_token %} {{ form.as_p }} <input type="submit" value="Send message"> </form>
- class django.views.generic.edit.BaseFormView¶
用於顯示表單的基本視圖。它不應直接使用,而是作為
django.views.generic.edit.FormView
或其他顯示表單的視圖的父類別。祖先 (MRO)
此視圖繼承了下列視圖的方法和屬性
CreateView
¶
- class django.views.generic.edit.CreateView¶
一個顯示用於建立物件的表單,重新顯示包含驗證錯誤的表單(如果有任何錯誤),並儲存物件的視圖。
祖先 (MRO)
此視圖繼承了下列視圖的方法和屬性
屬性
- template_name_suffix¶
顯示給
GET
請求的CreateView
頁面使用'_form'
的template_name_suffix
。例如,將此屬性變更為範例Author
模型建立物件的視圖的'_create_form'
,會使預設的template_name
變成'myapp/author_create_form.html'
。
- object¶
當使用
CreateView
時,您可以存取self.object
,這就是要建立的物件。如果物件尚未建立,則值會是None
。
範例 myapp/views.py:
from django.views.generic.edit import CreateView from myapp.models import Author class AuthorCreateView(CreateView): model = Author fields = ["name"]
範例 myapp/author_form.html:
<form method="post">{% csrf_token %} {{ form.as_p }} <input type="submit" value="Save"> </form>
- class django.views.generic.edit.BaseCreateView¶
用於建立新物件實例的基本視圖。它不應直接使用,而是作為
django.views.generic.edit.CreateView
的父類別。祖先 (MRO)
此視圖繼承了下列視圖的方法和屬性
方法
- get(request, *args, **kwargs)¶
將目前的物件實例 (
self.object
) 設定為None
。
- post(request, *args, **kwargs)¶
將目前的物件實例 (
self.object
) 設定為None
。
UpdateView
¶
- class django.views.generic.edit.UpdateView¶
一個顯示用於編輯現有物件的表單,重新顯示包含驗證錯誤的表單(如果有任何錯誤),並儲存物件變更的視圖。這會使用從物件的模型類別自動產生的表單(除非手動指定表單類別)。
祖先 (MRO)
此視圖繼承了下列視圖的方法和屬性
屬性
- template_name_suffix¶
顯示給
GET
請求的UpdateView
頁面使用'_form'
的template_name_suffix
。例如,將此屬性變更為範例Author
模型更新物件的視圖的'_update_form'
,會使預設的template_name
變成'myapp/author_update_form.html'
。
- object¶
當使用
UpdateView
時,您可以存取self.object
,這就是要更新的物件。
範例 myapp/views.py:
from django.views.generic.edit import UpdateView from myapp.models import Author class AuthorUpdateView(UpdateView): model = Author fields = ["name"] template_name_suffix = "_update_form"
範例 myapp/author_update_form.html:
<form method="post">{% csrf_token %} {{ form.as_p }} <input type="submit" value="Update"> </form>
- class django.views.generic.edit.BaseUpdateView¶
用於更新現有物件實例的基本視圖。它不應直接使用,而是作為
django.views.generic.edit.UpdateView
的父類別。祖先 (MRO)
此視圖繼承了下列視圖的方法和屬性
方法
- get(request, *args, **kwargs)¶
設定目前的物件實例 (
self.object
)。
- post(request, *args, **kwargs)¶
設定目前的物件實例 (
self.object
)。
DeleteView
¶
- class django.views.generic.edit.DeleteView¶
一個顯示確認頁面並刪除現有物件的視圖。只有當請求方法是
POST
時,才會刪除給定的物件。如果透過GET
擷取此視圖,則它會顯示一個確認頁面,其中應包含一個 POST 至相同 URL 的表單。祖先 (MRO)
此視圖繼承了下列視圖的方法和屬性
屬性
- form_class¶
繼承自
BaseDeleteView
。用於確認請求的表單類別。預設為django.forms.Form
,產生一個總是有效的空表單。透過提供您自己的
Form
子類別,您可以加入額外的需求,例如確認核取方塊。
- template_name_suffix¶
顯示給
GET
請求的DeleteView
頁面使用'_confirm_delete'
的template_name_suffix
。例如,將此屬性變更為'_check_delete'
,針對範例Author
模型刪除物件的視圖,會使預設的template_name
為'myapp/author_check_delete.html'
。
範例 myapp/views.py:
from django.urls import reverse_lazy from django.views.generic.edit import DeleteView from myapp.models import Author class AuthorDeleteView(DeleteView): model = Author success_url = reverse_lazy("author-list")
範例 myapp/author_confirm_delete.html:
<form method="post">{% csrf_token %} <p>Are you sure you want to delete "{{ object }}"?</p> {{ form }} <input type="submit" value="Confirm"> </form>
- class django.views.generic.edit.BaseDeleteView¶
用於刪除物件實例的基本視圖。它不打算直接使用,而是作為
django.views.generic.edit.DeleteView
的父類別。祖先 (MRO)
此視圖繼承了下列視圖的方法和屬性