Hi Paul,
Thanks, now you mention it and I look at it again it seems obvious, can't 
see the wood for the trees moment.
Funnily enough I had that included at some point, but have made so many 
changes.

I'll try that tonight when I get home, thanks very much for the prompt 
reply!
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/d5bbd60e-e719-4f60-ad45-cfd3d20d1674%40googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to