Thanks. I get this error using that code:

TypeError at /report/detail/30/edit/

__init__() takes at least 2 arguments (1 given)

This is referring to this line:

      story_form = StoryForm(instance=story)

I added a "story_id" argument to this, which brought up the form, but when 
I submitted it, it returned the form with errors listing all the fields as 
empty.

This is far trickier than I thought.



On Friday, May 18, 2012 7:01:25 PM UTC-4, jondbaker wrote:
>
> Hmmm... I don't think you need to pass 'request.user' in as an argument. 
> Also, you want to be sure that the 'instance' you pass as an argument to 
> the model form is the model record you want to update. For instance:
>
> def edit_story(request, story_id)
>     story = get_object_or_404(Story, pk=story_id)
>     if request.method == 'POST':
>         story_form = StoryForm(request.POST, request.FILES, instance=story)
>         if story_form.is_valid():
>             story_form.save()
>             return HttpResponseRedirect("/profiles/user_profile")
>     else: # GET request
>         story_form = StoryForm(instance=story)
>     return render_to_response('report/storyedit.html', {'form': 
> story_form}, context_instance=RequestContext(request))
>
>
>
> On Fri, May 18, 2012 at 4:52 PM, DF <[email protected]> wrote:
>
>> Thanks. This worked:
>>
>> else:
>>         story_form = StoryForm(request.user, instance=story_form)
>>
>>
>> One problem: it just adds a new version of the story instead of updating 
>> the previous version. So "editing" just creates multiple versions instead 
>> of actually editing the existing story.
>>
>> Is there a way to remedy this?
>>
>> On Friday, May 18, 2012 5:37:44 PM UTC-4, jondbaker wrote:
>>>
>>> The lines:
>>>     #else:
>>>         #story_form = StoryForm(instance=story_form)
>>> ...appear to be handling the GET request, and they're commented out.
>>>
>>> On Fri, May 18, 2012 at 3:22 PM, DF <[email protected]> wrote:
>>>
>>>> Newbie question. I have an application where registered users can 
>>>> submit stories. The posting and display works great but I wanted users to 
>>>> have the ability to edit any of their stories. The goal would be for a 
>>>> user 
>>>> to find a list of their stories on their profile page, choose one that 
>>>> they 
>>>> would like to edit, and then retrieve the form they initially submitted 
>>>> with the current information filled in to make the necessary edits.
>>>>
>>>> I composed a view, url and template to achieve this. The page displays, 
>>>> the story number from the url appears in the address bar but the form is 
>>>> nowhere to be found. I can't figure out if what I'm doing is an error in 
>>>> the template or the view (I'm thinking the former but can't be sure).
>>>>
>>>> Here is the model:
>>>>
>>>> class Story(models.Model):
>>>>     objects = StoryManager()
>>>>     title = models.CharField(max_length=**100)
>>>>     topic = models.CharField(max_length=**50)
>>>>     copy = models.TextField()
>>>>     author = models.ForeignKey(User, related_name="stories")
>>>>     zip_code = models.CharField(max_length=**10)
>>>>     latitude = models.FloatField(blank=False, null=False)
>>>>     longitude = models.FloatField(blank=False, null=False)
>>>>     date = models.DateTimeField(auto_now=**True, auto_now_add=True)
>>>>     pic = models.ImageField(upload_to='**pictures', blank=True)
>>>>     caption = models.CharField(max_length=**100)
>>>>
>>>>     def __unicode__(self):
>>>>         return " %s" % (self.title)
>>>>
>>>> Here is the form:
>>>>
>>>> class StoryForm(forms.ModelForm):
>>>>     class Meta:
>>>>         model = Story
>>>>         exclude = ('author',)
>>>>
>>>>     def __init__(self, author, *args, **kwargs):
>>>>         super(StoryForm, self).__init__(*args, **kwargs)
>>>>         self.author = author
>>>>
>>>>
>>>>     def save(self, commit=True):
>>>>         self.instance.author = self.author
>>>>         return super(StoryForm, self).save(commit)
>>>>
>>>> Here are the submit and edit views:
>>>>
>>>> @login_required
>>>> def submit_story(request):
>>>>     story_form = None
>>>>     if request.method =="POST":
>>>>         story_form = StoryForm(request.user, data=request.POST, 
>>>> files=request.FILES)
>>>>         if story_form.is_valid():
>>>>             new_story = story_form.save(commit=True)
>>>>             return HttpResponseRedirect("/report/**all/")
>>>>
>>>>     return render_to_response("report/**report.html", {'form': 
>>>> story_form or StoryForm(request.user) }, context_instance=**
>>>> RequestContext(request))
>>>>
>>>> @login_required
>>>> def edit_story (request, story_id):
>>>>     story_form = None
>>>>     if story_id:
>>>>         story_form = get_object_or_404(Story, pk=story_id)
>>>>         if story_form.author != request.user:
>>>>             return HttpResponse("You can only edit your own stories!")
>>>>
>>>>     if request.method == 'POST':
>>>>         story_form = StoryForm(request.user, data=request.POST, 
>>>> files=request.FILES)
>>>>         if story_form.is_valid():
>>>>             story_form.save(commit=True)
>>>>             return HttpResponse("/profiles/user_**profile")
>>>>     #else:
>>>>         #story_form = StoryForm(instance=story_form)
>>>>
>>>>     return render_to_response('report/**storyedit.html', {'form': 
>>>> story_form or StoryForm(request.user) }, context_instance=**
>>>> RequestContext(request))
>>>>
>>>>
>>>> The urls:
>>>>
>>>>     url(r'^report/$', 'project.report.views.submit_**story', 
>>>> name='write_story'),
>>>>     url(r'^detail/(?P<story_id>\d***)/edit/$', 
>>>> 'project.report.views.edit_**story', )
>>>>
>>>> And the edit template:
>>>>
>>>> {% extends 'base.html' %}
>>>> {% load report %}
>>>> {% block page_title %}Edit Story{% endblock %}
>>>> {% block headline %}Edit Story{% endblock %}
>>>> {% block content %}
>>>>
>>>>     <div class="row">
>>>>         <div class="span12">
>>>>             <div class="page-header">
>>>>                 <h2>Edit your story, <a href="{% url 
>>>> profiles_profile_detail user.username %}">{{user.username}}!</a></**h2>
>>>>             </div>
>>>>
>>>>             <form action="" class="form form-horizontal" method="post" 
>>>> enctype="multipart/form-data">
>>>>
>>>>                 <fieldset>
>>>>                     {% generic_form form %}
>>>>                     <div class="form-actions">
>>>>                         <input type="submit" value="Submit" class="btn 
>>>> btn-primary"/>
>>>>                     </div>
>>>>                 </fieldset>
>>>>             </form>
>>>>         </div>
>>>>     </div>
>>>> {% endblock %}
>>>>
>>>>
>>>> This is likely a stupid error but hours of scratching my head led me to 
>>>> seek some guidance. Any help welcomed and appreciated. Trying very hard to 
>>>> learn.
>>>>
>>>>
>>>>  -- 
>>>> You received this message because you are subscribed to the Google 
>>>> Groups "Django users" group.
>>>> To view this discussion on the web visit https://groups.google.com/d/**
>>>> msg/django-users/-/arNGcd_**FldoJ<https://groups.google.com/d/msg/django-users/-/arNGcd_FldoJ>
>>>> .
>>>> To post to this group, send email to [email protected].
>>>> To unsubscribe from this group, send email to django-users+unsubscribe@
>>>> **googlegroups.com <django-users%[email protected]>.
>>>> For more options, visit this group at http://groups.google.com/**
>>>> group/django-users?hl=en<http://groups.google.com/group/django-users?hl=en>
>>>> .
>>>>
>>>
>>>
>>>
>>> -- 
>>> Jonathan D. Baker
>>> Developer
>>> http://jonathandbaker.com
>>>
>>>  -- 
>> You received this message because you are subscribed to the Google Groups 
>> "Django users" group.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msg/django-users/-/pct7yxxnacEJ.
>>
>> To post to this group, send email to [email protected].
>> To unsubscribe from this group, send email to 
>> [email protected].
>> For more options, visit this group at 
>> http://groups.google.com/group/django-users?hl=en.
>>
>
>
>
> -- 
> Jonathan D. Baker
> Developer
> http://jonathandbaker.com
>
>  

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/django-users/-/NSVmlvziOvMJ.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.

Reply via email to