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.

