o 3a @s ddlmZddlmZddlmZddlmZm Z m Z ddl m Z m Z mZGdddeZGdd d ee ZGd d d e ZGd d d eeZGddde eZGdddeeZGdddeeZGdddeeZGdddeeZGdddZGdddee ZGdddeeZdS))ImproperlyConfigured)models)HttpResponseRedirect) ContextMixinTemplateResponseMixinView)BaseDetailViewSingleObjectMixin!SingleObjectTemplateResponseMixincsreZdZdZiZdZdZdZddZddZ ddZ dd d Z d d Z d dZ ddZddZfddZZS) FormMixinz5Provide a way to show and handle a form in a request.NcCs |jS)z6Return the initial data to use for forms on this view.)initialcopyselfr;/usr/lib/python3/dist-packages/django/views/generic/edit.py get_initials zFormMixin.get_initialcC|jS)z#Return the prefix to use for forms.)prefixrrrr get_prefixzFormMixin.get_prefixcCr)zReturn the form class to use.) form_classrrrrget_form_classrzFormMixin.get_form_classcCs"|dur|}|di|S)z7Return an instance of the form to be used in this view.Nr)rget_form_kwargs)rrrrrget_formszFormMixin.get_formcCs:||d}|jjdvr||jj|jjd|S)8Return the keyword arguments for instantiating the form.)r r)POSTPUT)datafiles)rrrequestmethodupdaterFILESrkwargsrrrr#s zFormMixin.get_form_kwargscCs|jstdt|jS)rrrrJs$    zModelFormMixin.get_form_classcs(t}t|dr|d|ji|S)rr<instance)r2rhasattrr"r<r$r3rrrgs  zModelFormMixin.get_form_kwargscCsH|jr|jjdi|jj}|Sz|j}W|Sty#tdw)r&z^No URL to redirect to. Either provide a url or define a get_absolute_url method on the Model.Nr)r(formatr<__dict__get_absolute_urlAttributeErrorr)rurlrrrr*ns  zModelFormMixin.get_success_urlcs||_t|S)z0If the form is valid, save the associated model.)saver<r2r-r+r3rrr-{s  zModelFormMixin.form_valid) r6r7r8r9r=rrr*r-r:rrr3rr;Fs  r;c@s(eZdZdZddZddZddZdS) ProcessFormViewz.Render a form on GET and processes it on POST.cOs||S)z=Handle GET requests: instantiate a blank version of the form.r.rr argsr%rrrgetszProcessFormView.getcOs$|}|r ||S||S)z Handle POST requests: instantiate a form instance with the passed POST variables and then check if it's valid. )ris_validr-r1)rr rMr%r,rrrposts  zProcessFormView.postcOs|j|i|Sr5)rP)rrMr%rrrputszProcessFormView.putN)r6r7r8r9rNrPrQrrrrrKs  rKc@eZdZdZdS) BaseFormViewz"A base view for displaying a form.Nr6r7r8r9rrrrrSrSc@rR)FormViewz?A view for displaying a form and rendering a template response.NrTrrrrrVrUrVc,eZdZdZfddZfddZZS)BaseCreateViewz Base view for creating a new object instance. Using this base class requires subclassing to provide a response mixin. c d|_tj|g|Ri|Sr5)r<r2rNrLr3rrrNzBaseCreateView.getcrYr5)r<r2rPrLr3rrrPrZzBaseCreateView.postr6r7r8r9rNrPr:rrr3rrX rXc@eZdZdZdZdS) CreateViewzQ View for creating a new object, with a response rendered by a template. _formNr6r7r8r9template_name_suffixrrrrr^sr^crW)BaseUpdateViewz Base view for updating an existing object. Using this base class requires subclassing to provide a response mixin. c$||_tj|g|Ri|Sr5) get_objectr<r2rNrLr3rrrN zBaseUpdateView.getcrcr5)rdr<r2rPrLr3rrrPrezBaseUpdateView.postr[rrr3rrbr\rbc@r]) UpdateViewzDView for updating an object, with a response rendered by a template.r_Nr`rrrrrfsrfc@s,eZdZdZdZddZddZddZdS) DeletionMixinz&Provide the ability to delete objects.NcOs$||_|}|jt|S)zn Call the delete() method on the fetched object and then redirect to the success URL. )rdr<r*deleter)rr rMr%r(rrrrhs  zDeletionMixin.deletecOs|j|g|Ri|Sr5)rhrLrrrrPszDeletionMixin.postcCs$|jr|jjdi|jjStd)Nr'r)r(rEr<rFrrrrrr*s zDeletionMixin.get_success_url)r6r7r8r9r(rhrPr*rrrrrgs  rgc@rR)BaseDeleteViewzx Base view for deleting an object. Using this base class requires subclassing to provide a response mixin. NrTrrrrrirUric@r]) DeleteViewzs View for deleting an object retrieved with self.get_object(), with a response rendered by a template. _confirm_deleteNr`rrrrrjsrjN)django.core.exceptionsr django.formsrrA django.httprdjango.views.generic.baserrrdjango.views.generic.detailrr r r r;rKrSrVrXr^rbrfrgrirjrrrrs"  <;