Skip to content

Edit

Generic editing views


NOTE

some of the examples in this page assumes an Author model has been defined as follows in myapp/models.py

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})

AsyncFormView

AsyncFormView works like django's FormView but the inheritance tree has changed to work asynchronously.

Ancestors (MRO):

  1. django-async-extensions.views.generic.base.AsyncTemplateResponseMixin
  2. django.views.generic.base.TemplateResponseMixin
  3. django_async_extensions.views.generic.edit.AsyncBaseFormView
  4. django_async_extensions.views.generic.edit.AsyncFormMixin
  5. django_async_extensions.views.generic.base.AsyncContextMixin
  6. django_async_extensions.views.generic.edit.AsyncProcessFormMixin
  7. django_async_extensions.views.generic.base.AsyncView
  8. django.views.generic.base.View

Example 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 some email
        pass

Example myapp/views.py

from myapp.forms import ContactForm
from django_async_extensions.views.generic.edit import AsyncFormView


class ContactFormView(AsyncFormView):
    template_name = "contact.html"
    form_class = ContactForm
    success_url = "/thanks/"

    async 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 await super().form_valid(form)

Example myapp/contact.html

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

AsyncCreateView

AsyncCreateView works similar to django's CreateView if no form is specified for this to view, AsyncModelForm is used by default, you can change this behaviour by specifying base_form_classin the view. any form you use with this view needs to define a asave() method. note that form_class and base_form_class are different: form_class is the form you design to work with your data, base_form_class is used to make a default form when no form_class is specified. also the inheritance tree is different to support async operation.

Ancestors (MRO):

  1. django-async-extensions.views.generic.detail.AsyncSingleObjectTemplateResponseMixin
  2. django-async-extensions.views.generic.base.AsyncTemplateResponseMixin
  3. django.views.generic.base.TemplateResponseMixin
  4. django_async_extensions.views.generic.edit.AsyncBaseCreateView
  5. django_async_extensions.views.generic.edit.AsyncModelFormMixin
  6. django_async_extensions.views.generic.edit.AsyncFormMixin
  7. django_async_extensions.views.generic.detail.AsyncSingleObjectMixin
  8. django_async_extensions.views.generic.base.AsyncContextMixin
  9. django_async_extensions.views.generic.edit.AsyncProcessFormMixin
  10. django_async_extensions.views.generic.base.AsyncView
  11. django.views.generic.base.View

Example myapp/views.py

from django_async_extensions.views.generic.edit import AsyncCreateView
from myapp.models import Author


class AuthorCreateView(AsyncCreateView):
    model = Author
    fields = ["name"]

Example myapp/author_form.html

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

Example using a different model form as a factory:

from django_async_extensions.views.generic.edit import AsyncCreateView
from myapp.models import Author
from myapp.forms import ModelForm

class AuthorCreateView(AsyncCreateView):
    model = Author
    fields = ["name"]
    base_form_class = ModelForm

AsyncUpdateView

AsyncUpdateView works similar to django's UpdateView if no form is specified for this to view, AsyncModelForm is used by default, you can change this behaviour by specifying base_form_classin the view. any form you use with this view needs to define a asave() method. note that form_class and base_form_class are different: form_class is the form you design to work with your data, base_form_class is used to make a default form when no form_class is specified. also the inheritance tree is different to support async operation.

Ancestors (MRO):

  1. django-async-extensions.views.generic.detail.AsyncSingleObjectTemplateResponseMixin
  2. django-async-extensions.views.generic.base.AsyncTemplateResponseMixin
  3. django.views.generic.base.TemplateResponseMixin
  4. django_async_extensions.views.generic.edit.AsyncBaseUpdateView
  5. django_async_extensions.views.generic.edit.AsyncModelFormMixin
  6. django_async_extensions.views.generic.edit.AsyncFormMixin
  7. django_async_extensions.views.generic.detail.AsyncSingleObjectMixin
  8. django_async_extensions.views.generic.base.AsyncContextMixin
  9. django_async_extensions.views.generic.edit.AsyncProcessFormMixin
  10. django_async_extensions.views.generic.base.AsyncView
  11. django.views.generic.base.View

Example myapp/views.py

from django_async_extensions.views.generic.edit import AsyncUpdateView
from myapp.models import Author


class AuthorCreateView(AsyncUpdateView):
    model = Author
    fields = ["name"]

Example myapp/author_form.html

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

Example using a different model form as a factory:

from django_async_extensions.views.generic.edit import AsyncUpdateView
from myapp.models import Author
from myapp.forms import ModelForm

class AuthorCreateView(AsyncUpdateView):
    model = Author
    fields = ["name"]
    base_form_class = ModelForm

AsyncDeleteView

AsyncDeleteView works similar to django's DeleteView but it's been modified to work as an async view.

Ancestors (MRO):

  1. django-async-extensions.views.generic.detail.AsyncSingleObjectTemplateResponseMixin
  2. django_async_extensions.views.generic.edit.AsyncBaseDeleteView
  3. django_async_extensions.views.generic.edit.AsyncDeletionMixin
  4. django_async_extensions.views.generic.edit.AsyncFormView
  5. django-async-extensions.views.generic.base.AsyncTemplateResponseMixin
  6. django.views.generic.base.TemplateResponseMixin
  7. django_async_extensions.views.generic.edit.AsyncBaseFormView
  8. django_async_extensions.views.generic.edit.AsyncFormMixin
  9. django_async_extensions.views.generic.detail.AsyncBaseDetailView
  10. django_async_extensions.views.generic.detail.AsyncSingleObjectMixin
  11. django_async_extensions.views.generic.base.AsyncContextMixin
  12. django_async_extensions.views.generic.edit.AsyncProcessFormMixin
  13. django_async_extensions.views.generic.base.AsyncView
  14. django.views.generic.base.View

Base Class

AsyncBaseFormView

A base view for displaying a form. It is not intended to be used directly, but rather as a parent class of the django_async_extensions.views.generic.edit.AsyncFormView or other views displaying a form.

similar to django's BaseFormView but the ancestors are different.

Ancestors (MRO):

  1. django_async_extensions.views.generic.edit.AsyncBaseFormView
  2. django_async_extensions.views.generic.edit.AsyncFormMixin
  3. django_async_extensions.views.generic.base.AsyncContextMixin
  4. django_async_extensions.views.generic.edit.AsyncProcessFormMixin
  5. django_async_extensions.views.generic.base.AsyncView
  6. django.views.generic.base.View

AsyncBaseCreateView

A base view for creating a new object instance. It is not intended to be used directly, but rather as a parent class of the django_async_extensions.views.generic.edit.AsyncCreateView.

similar to django's BaseCreateView but asyncified.

Ancestors (MRO):

  1. django_async_extensions.views.generic.edit.AsyncModelFormMixin
  2. django_async_extensions.views.generic.edit.AsyncFormMixin
  3. django_async_extensions.views.generic.base.AsyncContextMixin
  4. django_async_extensions.views.generic.detail.AsyncSingleObjectMixin
  5. django_async_extensions.views.generic.edit.AsyncProcessFormMixin
  6. django_async_extensions.views.generic.base.AsyncView
  7. django.views.generic.base.View

AsyncBaseUpdateView

A base view for updating an object instance. It is not intended to be used directly, but rather as a parent class of the django_async_extensions.views.generic.edit.AsyncUpdateView.

similar to django's BaseUpdateView but asyncified.

Ancestors (MRO):

  1. django_async_extensions.views.generic.edit.AsyncModelFormMixin
  2. django_async_extensions.views.generic.edit.AsyncFormMixin
  3. django_async_extensions.views.generic.base.AsyncContextMixin
  4. django_async_extensions.views.generic.detail.AsyncSingleObjectMixin
  5. django_async_extensions.views.generic.edit.AsyncProcessFormMixin
  6. django_async_extensions.views.generic.base.AsyncView
  7. django.views.generic.base.View

AsyncBaseDeleteView

A base view for deleting an object instance. It is not intended to be used directly, but rather as a parent class of the django_async_extensions.views.generic.edit.AsyncDeleteView.

similar to django's BaseDeleteView but asyncified.

Ancestors (MRO):

  1. django_async_extensions.views.generic.edit.AsyncDeletionMixin
  2. django_async_extensions.views.generic.edit.AsyncFormView
  3. django-async-extensions.views.generic.base.AsyncTemplateResponseMixin
  4. django.views.generic.base.TemplateResponseMixin
  5. django_async_extensions.views.generic.edit.AsyncBaseFormView
  6. django_async_extensions.views.generic.edit.AsyncFormMixin
  7. django_async_extensions.views.generic.detail.AsyncBaseDetailView
  8. django_async_extensions.views.generic.detail.AsyncSingleObjectMixin
  9. django_async_extensions.views.generic.base.AsyncContextMixin
  10. django_async_extensions.views.generic.edit.AsyncProcessFormMixin
  11. django_async_extensions.views.generic.base.AsyncView
  12. django.views.generic.base.View