Disons que j'ai un formulaire pour ajouter/produits d'édition (avec le champ « utilisateur » étant une clé étrangère à mon utilisateur) déclenché à partir de deux vues distinctes fonctions - ajouter/modifier:Django étape form.save par étape
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))
méthode save de la forme se présente comme suit:
def save(self, user, *args, **kwargs):
self.instance.user = user
post = super(ProductAddForm, self).save(*args, **kwargs)
post.save()
quelqu'un peut-il me dire ce qui se passe dans cette étape de méthode de sauvegarde par étape Pourquoi nous appelons super sur ce formulaire et quelle est la différence dans le traitement tout quand nous éditer et sauvegarder le nouveau produit si l'appel de fonction est le même?
Avez-vous regardé docs.python.org pour voir ce que fait la fonction 'super'? http://docs.python.org/library/functions.html#super Qu'avez-vous appris là-bas? –
Que voulez-vous dire par "éditer"? Voulez-vous dire "valider"? C'est une caractéristique distincte d'un formulaire. Ou voulez-vous dire autre chose? –
Par "2 vues" voulez-vous dire "deux fonctions de vue"? Si oui, veuillez mettre à jour votre question avec toutes ces informations. Veuillez arrêter d'ajouter des commentaires. S'il vous plaît mettre à jour la question pour contenir tous les faits. Puis supprimez les commentaires. –