def form_valid(self, form): if self.attachment.article == self.article: revision = models.AttachmentRevision() revision.attachment = self.attachment revision.set_from_request(self.request) revision.deleted = True revision.file = self.attachment.current_revision.file if self.attachment.current_revision else None revision.description = self.attachment.current_revision.description if self.attachment.current_revision else "" revision.save() self.attachment.current_revision = revision self.attachment.save() messages.info( self.request, _(u'The file %s was deleted.') % self.attachment.original_filename) else: self.attachment.articles.remove(self.article) messages.info( self.request, _(u'This article is no longer related to the file %s.') % self.attachment.original_filename) return redirect("wiki:get", path=self.urlpath.path, article_id=self.article.id)
def save(self, *args, **kwargs): # This is not having the intended effect if 'file' not in self._meta.fields: self._meta.fields.append('file') if self.cleaned_data['unzip_archive']: new_attachments = [] try: for zipinfo in self.zipfile.filelist: f = tempfile.NamedTemporaryFile(mode='r+w') f.write(self.zipfile.read(zipinfo.filename)) f = File(f, name=zipinfo.filename) try: attachment = models.Attachment() attachment.article = self.article attachment.original_filename = zipinfo.filename attachment.save() attachment.articles.add(self.article) attachment_revision = models.AttachmentRevision() attachment_revision.file = f attachment_revision.description = self.cleaned_data[ 'description'] attachment_revision.attachment = attachment attachment_revision.set_from_request(self.request) attachment_revision.save() f.close() except models.IllegalFileExtension: raise new_attachments.append(attachment_revision) except zipfile.BadZipfile: raise return new_attachments else: return super(AttachmentArchiveForm, self).save(*args, **kwargs)