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.

