Django form.save шаг за шагом

Скажем, у меня есть форма для добавления/редактирования, что продукты (с полем 'пользователь', являющийся внешним ключом моему Пользователю) инициированный от двух отдельных функций представления - добавляют/редактируют:

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))

Метод сохранения формы смотрит следующим образом:

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

Кто-то может сказать мне, что происходит в этом методе сохранения шаг за шагом? Почему мы звоним супер на этой форме и каково различие в целой обработке, когда мы редактируем и сохраняем новый продукт, если вызов функции является тем же?

7
задан durron597 22 July 2015 в 16:47
поделиться

1 ответ

self.instance.user = user

Сохранить аргумент пользователя в пользовательском атрибуте объекта self.instance

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

Invoke метод сохранения суперкласса для получения результирующего объекта.

post.save ()

Сохраните получившийся объект. В этом может быть необходимость или необходимость, в зависимости от аргументов save .

См. http://docs.djangoproject.com/en/1.2/topics/forms/modelforms/#the-save-method . Если фиксация имеет значение False, то объект post не был сохранен в базе данных.

3
ответ дан 7 December 2019 в 16:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: