o 3ÛøaŒ ã@s ddlmZddlmZddlmZddlmZm Z m Z ddl m Z m Z mZGdd„deƒZGdd „d ee ƒZGd d „d e ƒZGd d „d eeƒZGdd„de eƒZGdd„deeƒZGdd„deeƒZGdd„deeƒZGdd„deeƒZGdd„dƒZGdd„dee ƒZGdd„deeƒZdS)é)ÚImproperlyConfigured)Úmodels)ÚHttpResponseRedirect)Ú ContextMixinÚTemplateResponseMixinÚView)ÚBaseDetailViewÚSingleObjectMixinÚ!SingleObjectTemplateResponseMixincsreZdZdZiZdZdZdZdd„Zdd„Z dd„Z dd d „Z d d „Z d d„Z dd„Zdd„Z‡fdd„Z‡ZS)Ú FormMixinz5Provide a way to show and handle a form in a request.NcCs |j ¡S)z6Return the initial data to use for forms on this view.)ÚinitialÚcopy©Úself©rú;/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_prefixózFormMixin.get_prefixcCr)zReturn the form class to use.)Ú form_classrrrrÚget_form_classrzFormMixin.get_form_classcCs"|dur| ¡}|di| ¡¤ŽS)z7Return an instance of the form to be used in this view.Nr)rÚget_form_kwargs)rrrrrÚget_formszFormMixin.get_formcCs:| ¡| ¡dœ}|jjdvr| |jj|jjdœ¡|S)ú8Return the keyword arguments for instantiating the form.)r r)ÚPOSTÚPUT)ÚdataÚfiles)rrÚrequestÚmethodÚupdaterÚFILES©rÚkwargsrrrr#sþ þzFormMixin.get_form_kwargscCs|jstdƒ‚t|jƒS)úrrrrJs$ÿ    ÿÿzModelFormMixin.get_form_classcs(tƒ ¡}t|dƒr| d|ji¡|S)rr<Úinstance)r2rÚhasattrr"r<r$r3rrrgs  zModelFormMixin.get_form_kwargscCsH|jr|jjdi|jj¤Ž}|Sz|j ¡}W|Sty#tdƒ‚w)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_urlÚAttributeErrorr)rÚurlrrrr*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(eZdZdZdd„Zdd„Zdd„ZdS) Ú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%rrrÚgetƒszProcessFormView.getcOs$| ¡}| ¡r | |¡S| |¡S)zˆ Handle POST requests: instantiate a form instance with the passed POST variables and then check if it's valid. )rÚis_validr-r1)rr rMr%r,rrrÚpost‡s  zProcessFormView.postcOs|j|i|¤ŽSr5)rP)rrMr%rrrÚput”szProcessFormView.putN)r6r7r8r9rNrPrQrrrrrKs  rKc@óeZdZdZdS)Ú BaseFormViewz"A base view for displaying a form.N©r6r7r8r9rrrrrS˜órSc@rR)ÚFormViewz?A view for displaying a form and rendering a template response.NrTrrrrrVœrUrVcó,eZdZdZ‡fdd„Z‡fdd„Z‡ZS)ÚBaseCreateViewz„ Base view for creating a new object instance. Using this base class requires subclassing to provide a response mixin. có d|_tƒj|g|¢Ri|¤ŽSr5)r<r2rNrLr3rrrN¦ózBaseCreateView.getcrYr5)r<r2rPrLr3rrrPªrZzBaseCreateView.post©r6r7r8r9rNrPr:rrr3rrX ó rXc@óeZdZdZdZdS)Ú CreateViewzQ View for creating a new object, with a response rendered by a template. Ú_formN©r6r7r8r9Útemplate_name_suffixrrrrr^¯sr^crW)ÚBaseUpdateViewz Base view for updating an existing object. Using this base class requires subclassing to provide a response mixin. có$| ¡|_tƒj|g|¢Ri|¤ŽSr5)Ú get_objectr<r2rNrLr3rrrN¼ó zBaseUpdateView.getcrcr5)rdr<r2rPrLr3rrrPÀrezBaseUpdateView.postr[rrr3rrb¶r\rbc@r])Ú UpdateViewzDView for updating an object, with a response rendered by a template.r_Nr`rrrrrfÅsrfc@s,eZdZdZdZdd„Zdd„Zdd„ZdS) Ú DeletionMixinz&Provide the ability to delete objects.NcOs$| ¡|_| ¡}|j ¡t|ƒS)zn Call the delete() method on the fetched object and then redirect to the success URL. )rdr<r*Údeleter)rr rMr%r(rrrrhÎs  zDeletionMixin.deletecOs|j|g|¢Ri|¤ŽSr5)rhrLrrrrPÙszDeletionMixin.postcCs$|jr|jjdi|jj¤ŽStdƒ‚)Nr'r)r(rEr<rFrrrrrr*Üs ÿzDeletionMixin.get_success_url)r6r7r8r9r(rhrPr*rrrrrgÊs  rgc@rR)ÚBaseDeleteViewzx Base view for deleting an object. Using this base class requires subclassing to provide a response mixin. NrTrrrrriärUric@r])Ú DeleteViewzs View for deleting an object retrieved with self.get_object(), with a response rendered by a template. Ú_confirm_deleteNr`rrrrrjìsrjN)Údjango.core.exceptionsrÚ django.formsrrAÚ django.httprÚdjango.views.generic.baserrrÚdjango.views.generic.detailrr r r r;rKrSrVrXr^rbrfrgrirjrrrrÚs"  <;