def get_form(self, DocumentDetailForm): self.set_mongoadmin() context = self.set_permissions_in_context({}) if not context['has_edit_permission']: return HttpResponseForbidden("You do not have permissions to edit this content.") self.document_type = getattr(self.models, self.document_name) self.ident = self.kwargs.get('id') self.document = self.document_type.objects.get(id=self.ident) self.form = DocumentDetailForm() self.form = document_detail_form_factory(form=self.form, document_type=self.document_type, initial=self.document) if self.request.method == 'POST': self.form.data = self.request.POST self.form.is_bound = True if self.form.is_valid(): for key, field in self.form.fields.items(): if 'readonly' in field.widget.attrs: # For _id or things specified as such continue if isinstance(field.widget, DateTimeInput): format = field.widget.format setattr(self.document, key, datetime.strptime(self.request.POST[key], format)) continue if isinstance(field.widget, CheckboxInput): if key in self.request.POST: setattr(self.document, key, True) else: setattr(self.document, key, False) continue if isinstance(field.widget, widgets.Select): # supporting reference fields! value = field.mongofield.document_type.objects.get(id=self.request.POST[key]) setattr(self.document, key, value) continue # for strings setattr(self.document, key, self.request.POST[key]) self.document.save() messages.add_message(self.request, messages.INFO, 'Your changes have been saved.') return self.form
def get_form(self, DocumentDetailForm): self.set_mongonaut_base() self.document_type = getattr(self.models, self.document_name) self.ident = self.kwargs.get('id') self.document = self.document_type.objects.get(id=self.ident) self.form = DocumentDetailForm() self.form = document_detail_form_factory(self.form, self.document_type, self.document) if self.request.method == 'POST': self.form.data = self.request.POST self.form.is_bound = True if self.form.is_valid(): for key, field in self.form.fields.items(): if 'readonly' in field.widget.attrs: # For _id # TODO - make the ones below work # for ReferenceField - like <class 'articles.models.User'> on Blog # For ListField - like 'field': <mongoengine.fields.StringField object at 0x101b51810>, # For EmbeddedDocumentField continue if isinstance(field.widget, DateTimeInput): format = field.widget.format setattr( self.document, key, datetime.strptime(self.request.POST[key], format)) continue if isinstance(field.widget, CheckboxInput): if key in self.request.POST: setattr(self.document, key, True) else: setattr(self.document, key, False) continue # for strings setattr(self.document, key, self.request.POST[key]) self.document.save() # TODO add message for save return self.form
def get_form(self, DocumentDetailForm): self.set_mongonaut_base() self.document_type = getattr(self.models, self.document_name) self.form = DocumentDetailForm() self.form = document_detail_form_factory(form=self.form, document_type=self.document_type) if self.request.method == 'POST': self.form.data = self.request.POST self.form.is_bound = True if self.form.is_valid(): self.document = self.document_type() for key, field in self.form.fields.items(): if 'readonly' in field.widget.attrs: # For _id continue if isinstance(field.widget, DateTimeInput): format = field.widget.format setattr(self.document, key, datetime.strptime(self.request.POST[key], format)) continue if isinstance(field.widget, CheckboxInput): if key in self.request.POST: setattr(self.document, key, True) else: setattr(self.document, key, False) continue if isinstance(field.widget, widgets.Select): # supporting reference fields! value = field.mongofield.document_type.objects.get(id=self.request.POST[key]) setattr(self.document, key, value) continue # for strings setattr(self.document, key, self.request.POST[key]) self.document.save() messages.add_message(self.request, messages.INFO, 'Your new document has been added and saved.') return self.form
def get_form(self, DocumentDetailForm): self.set_mongonaut_base() self.document_type = getattr(self.models, self.document_name) self.ident = self.kwargs.get('id') self.document = self.document_type.objects.get(id=self.ident) self.form = DocumentDetailForm() self.form = document_detail_form_factory(self.form, self.document_type, self.document) if self.request.method == 'POST': self.form.data = self.request.POST self.form.is_bound = True if self.form.is_valid(): for key, field in self.form.fields.items(): if 'readonly' in field.widget.attrs: # For _id # TODO - make the ones below work # for ReferenceField - like <class 'articles.models.User'> on Blog # For ListField - like 'field': <mongoengine.fields.StringField object at 0x101b51810>, # For EmbeddedDocumentField continue if isinstance(field.widget, DateTimeInput): format = field.widget.format setattr(self.document, key, datetime.strptime(self.request.POST[key], format)) continue if isinstance(field.widget, CheckboxInput): if key in self.request.POST: setattr(self.document, key, True) else: setattr(self.document, key, False) continue # for strings setattr(self.document, key, self.request.POST[key]) self.document.save() # TODO add message for save return self.form