通用編輯視圖

此頁面描述了以下視圖,並為編輯內容提供基礎

另請參閱

訊息框架 包含 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)

此視圖繼承了下列視圖的方法和屬性

返回頂部