2010-06-07 6 views
0

J'ai une méthode où je sauvegarde les données des utilisateurs, mais chaque utilisateur doit avoir un seul profil, donc chaque fois qu'il enregistre, les données doivent être remplacées. d'abord je vérifie s'il a déjà des données de profil, et dans ce cas j'ajoute une instance au formulaire. sinon, (c'est sa première inscription), j'ajoute simplement des données dans la base de données mon code est: mais j'obtiens une erreur: l'objet 'QuerySet' n'a pas d'attribut '_meta' ma méthode est-elle correcte? Merci!instance de formulaires django

def save_userprofile (demande):

if request.method == 'POST': 
     u = UserProfile.objects.filter(created_by = request.user) 
     if u: 

      form = UserProfileForm(request.POST, request.FILES,instance=u) 
     else: 
      form = UserProfileForm(request.POST, request.FILES) 

Répondre

4

Si vous vous attendez à un seul objet de retour d'une requête, vous devez utiliser la méthode get().

from django.core.exceptions import ObjectDoesNotExist 
try: 
    u = UserProfile.objects.get(created_by = request.user) 
    # can update here 
except ObjectDoesNotExist: 
    # create object 

Le queryset reference devrait expliquer tous. Vous pouvez également trouver get_or_create() est utile.

1

L'argument instance de UserProfileForm ne prévoit pas recevoir un QuerySet, qui est ce que vous le donner. Pour retrive le profil, vous devez utiliser, qui retourne un seul objet UserProfile:

u = UserProfile.objects.get(created_by = request.user) 
Questions connexes