Powiedzmy mam formularza dodawania/edycji produktów (z pola „użytkownik” jest klucz obcy do mojego użytkowników) wywołany z dwoma oddzielnymi funkcjami view - dodawać/edytować:Django form.save krok po kroku
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))
formie jest metoda oszczędzania wygląda następująco:
def save(self, user, *args, **kwargs):
self.instance.user = user
post = super(ProductAddForm, self).save(*args, **kwargs)
post.save()
Czy ktoś mógłby mi powiedzieć, co się dzieje na tym zaoszczędzić metoda krok po kroku Dlaczego wywołanie super w tej formie i jaka jest różnica w całej obróbki, gdy edytować i zapisywać nowy produkt, jeśli wywołanie funkcji jest takie samo?
Pan spojrzał na docs.python.org, aby zobaczyć, co robi 'funkcja super'? http://docs.python.org/library/functions.html#super Czego się tam nauczyłeś? –
Co masz na myśli przez "edytowanie"? Masz na myśli "walidację"? To osobna cecha formularza. Czy masz na myśli coś innego? –
Przez "2 widoki" rozumiesz "dwie funkcje widoku"? Jeśli tak, proszę ZAKTUALIZUJ swoje pytanie z tymi wszystkimi informacjami. Proszę ZATRZYMAJ dodanie komentarzy. ZAKTUALIZUJ pytanie, aby zawierało WSZYSTKIE fakty. Następnie usuń komentarze. –