django - Want to add data to a form, form is valid, but data not among cleaned_data -


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