Its likely i'm passing the wrong arguements, because its a type mismatch 
error
However i'm only passing the request.POST, instance and request.user.

Since the two arguements are "self" and "user", prehaps i'm not passing the 
self objject corrrectly, though I thought this was past of the request.POST 
data?


Django Version:1.4.3Exception Type:TypeErrorException Value:

save() takes at least 2 arguments (2 given)




On Thursday, 7 November 2013 19:10:09 UTC-10, Jason S wrote:
>
> Hi,
> Thanks for the tip, i tried adding the user as the argument, i tried the 
> following:
> new_post = pform.save(user=request.user)
> new_post = pform.save(user)
> new_post = pform.save(request.user)
> and a few other things...
>
> Now i just get the following save() takes at least 2 arguments (2 given)
>
> Any ideas?
> Thanks,
> Jason
>
> On Thursday, 7 November 2013 10:52:16 UTC-10, Jason S wrote:
>>
>> 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/72e921c1-3ec0-4fa1-86f9-391c9b48b46b%40googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to