Hi, 
The first form saves fine but the second still dosn't.
I can't seem to pass the poll object to the save method of the form 
properly.

Since i'm using nonrel once i've passed the poll object I can append the 
comment using something like poll.comments.append(comment) but I just don't 
seem to be able to get it going. 

I've re-written the form quite a few times without any luck and have looked 
at a few similar examples but can't quite piece it together. Any chance you 
could show me how its done? 

On Thursday, 7 November 2013 23:02:48 UTC-10, Jason S wrote:
>
> Hi Paul,
> After a bit more playing around I got it going, there was another 
> unrelated issue with my code.
> Learnt to use the debugging info more effectively in the process which is 
> great.
>
> Thanks again for your help, very much appreciated.
> Kind regards,
> Jason
>
> On Thursday, 7 November 2013 04:56:14 UTC-10, [email protected] wrote:
>>
>> Hey Jason--
>>
>> You defined the save method as needing the user parameter, but you don't 
>> pass that in.  Try that (assuming user should equal request.user).  Good 
>> luck!
>>
>> -Paul
>>
>> On Thursday, November 7, 2013 5:25:18 AM UTC-5, Jason S wrote:
>>>
>>> Hi, 
>>> Disclaimer - I'm new to django and python, so please bear with me.
>>>
>>> Note: My django instance uses a nosql database.
>>>
>>> I'm trying to create a formset which has multiple forms based on models.
>>> The formset will have one form "post", then 1-3 "comment" forms. 
>>> Eventually i'd like to be able to add/remove the comment fields but i'll 
>>> work that out later once the form saves with manually set number of comment 
>>> fields. 
>>> For now the formset just has the two forms "post" and "comment" to make 
>>> it easy, but if i can save one it should work for more.
>>> The form displays as expected but I get "save() takes at least 2 
>>> arguments (1 given)".
>>>
>>> I think thats because i'm supplying the "post" data, but not the object 
>>> itself? I've tried referencing it but without success.
>>> I may need to set the form up as a class with methods and then use 
>>> something like the following which is how another tut does it, but my first 
>>> attempt to do it this way failed.
>>>  21     def post(self, request, *args, **kwargs):
>>>  22         self.object = self.get_object()
>>>  23         form = CommentForm(object=self.object, data=request.POST)
>>>  24
>>>  25         if form.is_valid():
>>>  26             form.save()
>>>  27             return 
>>> HttpResponseRedirect(self.object.get_absolute_url())
>>>
>>>
>>> *Models:*
>>>   7 class Object_Post(models.Model):
>>>   8     # Defines the post model
>>>   9     def __unicode__(self):
>>>  10         return self.name
>>>  11
>>>  12     name = models.CharField(max_length=70)
>>>  13     desc = models.TextField()
>>>  14     Comments = ListField(EmbeddedModelField('Comment), 
>>> editable=False)
>>>  15
>>>  16
>>>  17 class Comment(models.Model):
>>>  18     # Comments.
>>>  19     def __unicode__(self):
>>>  20        return self.name
>>>  21
>>>  22     name = models.CharField(max_length=70)
>>>  23     desc = models.TextField()
>>>
>>> *Forms:*
>>>  39 class PostForm(forms.ModelForm):
>>>  40     class Meta:
>>>  41         model = Object_Post
>>>  42
>>>  43     def save(self, user, commit = True):
>>>  44         Object_Post = super(PostForm, self).save(commit = False)
>>>  45         Object_Post.user = user
>>>  46
>>>  47         if commit:
>>>  48             Object_Post.save()
>>>  49
>>>  50         return Object_Post
>>>  51
>>>  52 class CommentForm(forms.ModelForm):
>>>  53     class Meta:
>>>  54         model = Comment
>>>  55
>>>  56     def save(self, user, commit = True):
>>>  57         Comment = super(CommentForm, self).save(commit = False)
>>>  58         Comment.user = user
>>>  59
>>>  60         if commit:
>>>  61             Comment.save()
>>>  62
>>>  63         return Comment
>>>
>>> *View:*
>>>  65 def create_post(request):
>>>  66 ....
>>>  67 #   
>>>  68 #   Manually set number of comment fields for now
>>>  69     commentfields = 1
>>>  70
>>>  71     if request.method == "POST":
>>>  72         pform = PostForm(request.POST, instance=Object_Post())
>>>  73 #        
>>>  74         cforms = [CommentForm(request.POST, prefix=str(x), 
>>> instance=Comment()) for x in range(0,Commentfields)]
>>>  75         if pform.is_valid() and all([cf.is_valid() for cf in 
>>> cforms]):
>>>  76 #        
>>>  77             new_post = pform.save()
>>>  78             for cf in cforms:
>>>  79                 new_Comment = cf.save(commit=False)
>>>  80                 new_Comment.Object_Post = new_post
>>>  81                 new_Comment.save()
>>>  82             return 
>>> HttpResponseRedirect(reverse('blogtut.views.dashboard'))
>>>  83     else:
>>>  84         pform = PostForm(instance=Object_Post())
>>>  85         cforms = [CommentForm(prefix=str(x), instance=Comment()) for 
>>> x in range(0,Commentfields)]
>>>  86         return render_to_response('create_object.html', 
>>> {'Post_Form': pform, 'Comment_Form': cforms},
>>>  87             context_instance=RequestContext(request)
>>>  88         )
>>>
>>> *Template:*
>>>   1 {% extends "base.html" %}
>>>   2
>>>   3 {% block content %}
>>>   4 <dl>
>>>   5
>>> # Irrelevent to the form.
>>>  11
>>>  12 </dl>
>>>  13
>>>  14 <form action="{% url blogtut.views.create_post %}" method="post" 
>>> accept-ch>
>>>  15     {% csrf_token %}
>>>  16     {{ form.as_p }}
>>>  17
>>>  18     Enter a name and description for the post: </br>
>>>  19     {{ Post_Form }} </br>
>>>  20     Enter one or more Comments:</br>
>>>  21     {% for mform in Comment_Form %}
>>>  22     Comment: {{ cform }}</br>
>>>  23     {% endfor %}
>>>  24 ....
>>>  25     <p><input type="submit" value="Create Now"/></p>
>>>  26 </form>
>>>  27
>>>  28 {% endblock %}
>>> ~
>>>
>>> I'd really appreciate any help here as i've been hitting my head against 
>>> this for a week or so now, would particularly appreciate examples as my 
>>> python/django skills are novice and it'll help me understand.
>>>
>>> Thanks for your time/help!
>>> Jason
>>>
>>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/ee89b689-ea05-40c6-a68d-216c462db268%40googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to