开发者

Django form.save step by step

开发者 https://www.devze.com 2023-01-05 12:52 出处:网络
Let\'s say I have a form for adding/editing products (with field \'user\' being a foreign key to my User) triggered from two separate view functions - add/edit :

Let's say I have a form for adding/editing products (with field 'user' being a foreign key to my User) triggered from two separate view functions - add/edit :

def product_add(request):
    userprofile = UserProfile.objects.get(user=request.user)
    if request.method == 'POST':
        form = ProductAddForm(request.POST, request.FILES,)
        if form.is_valid():
            form.save(user=request.user)
    else:
        form = ProductAddForm()
    return render_to_response('products/product_add.html', {
            'form':form, 'user':request.user,
            }, context_instance=RequestContext(request))

def product_edit(request, id):
    product = get_object_or_404(Product, id=id, user=request.user)
    if product.user.id!=request.user.id:
        raise Http404
    if request.method == 'POST':
        form = ProductAddForm(request.POST, request.FILES, instance=product)
        if form.is_valid():
            form.save(user=request.user)            
    else:
        form = ProductAddForm(instance=product)
    return render_to_response('products/product_edit.html', {
            'form':form, 'user':request.user,
            }, context_instance=RequestContext(request))

The form's save method looks as follows :

def save(self, user, *args, **kwargs):
    self.instance.user = user                           
    post = super(ProductAddForm, self).save(*args, **kwargs)
    post.save()

Can somebody tell me what's happening in this save method step by step ?Why do we call super on this form and what is the difference in whole processing when we edit and save new product if function开发者_如何学运维 call is the same ?


self.instance.user = user

Save the user argument into the self.instance object's user attribute

post = super(ProductAddForm, self).save(*args, **kwargs)

Invoke the superclass save method to get a resulting object.

post.save()

Save the resulting object. This may be needless, or it may be essential, depending on the arguments to save.

See http://docs.djangoproject.com/en/1.2/topics/forms/modelforms/#the-save-method. If commit is False, then the post object has not been saved to the database.

0

精彩评论

暂无评论...
验证码 换一张
取 消