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/d15763ce-30bb-4f7b-a1de-46339339e020%40googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to