django 1.10
i'm trying add data form programmatically.
class wiki(models.model): related_model = models.charfield(max_length=100, blank=false, null=false, default="") related_object_id = models.charfield(max_length=100, blank=false, null=false, default="") article = models.textfield(blank=false, null=false, default="") class wikicreate(createview): model = wiki fields = ['article'] def post(self, request, *args, **kwargs): related_model = kwargs.get('model') related_object_id = kwargs.get('pk') form = self.get_form() form.data._mutable = true form.data['related_model'] = related_model form.data['related_object_id'] = related_object_id form.data._mutable = false return super(wikicreate, self).post(request, *args, **kwargs)
in post method of superclass place breakpoint:
class processformview(view): def post(self, request, *args, **kwargs): """ handles post requests, instantiating form instance passed post variables , checked validity. """ form = self.get_form() if form.is_valid(): # breakpoint return self.form_valid(form) else: return self.form_invalid(form)
well, can see @ breakpoint. form.data =
then step in debugger. form.is_valid() returns true. so, can see that: 1) _errors empty; 2) cleaned_data = {'article': "some text i've input."}.
well, 'related_model' , 'related_object_id' have not appeared in cleaned data.
could me understand why data these fields not saved?
this isn't way add data form submission. should adding model instance, not form, once has been created in form_valid
method. shouldn't overriding post
@ all.
class wikicreate(createview): model = wiki fields = ['article'] def form_valid(self, form): related_model = self.kwargs.get('model') related_object_id = self.kwargs.get('pk') item = form.save(commit=false) item.related_model = related_model item.object_id = related_object_id item.save() return redirect(self.get_success_url())
Comments
Post a Comment