2010-02-08 4 views
1

Ma question est très similaire à cette question: Django: Populate user ID when saving a modelDjango: Enregistrer ID utilisateur avec le modèle Enregistrer

Malheureusement, je ne comprends pas tout à fait leur réponse.

Lorsqu'un utilisateur se connecte, je souhaite qu'il soit en mesure de soumettre un lien et que j'ai une clé étrangère user_id que je n'arrive pas à remplir.

def submit(request): 
    if request.method == 'POST': 
     form = AddLink(request.POST) 
     if form.is_valid(): 
      form.save() 
      return redirect('home') 
    else: 
     form = AddLink() 

    return render_to_response('links/submit.html', {'form': form}) 

Everytime Je soumets ma forme, il mentionne:

null value in column "user_id" violates not-null constraint 

Ce que je comprends, mais ce que je ne sais pas comment ajouter user_id à mon objet formulaire. Comment puis-je accéder à l'identifiant de l'utilisateur actuellement connecté et le soumettre avec mes données de formulaire?

Répondre

11

Vous pouvez faire quelque chose comme ceci:

if form.is_valid(): 
    link = form.save(commit=False) 
    link.user = request.user 
    link.save() 

commettras = False vous permet de modifier l'objet résultant avant qu'il soit sauvegardé en fait à la base de données.

+0

j'ai vu que ... Est-ce la meilleure façon de le faire? Quelque chose comme ça semble vraiment commun et je pense que leur aurait été quelque chose d'automatique. – TheLizardKing

+0

N'oubliez pas de vérifier si l'utilisateur s'est connecté à votre vue. Le décorateur @login_required est assez sympa pour cela :-) – Klette

+0

Eh bien, vous pouvez insérer le user_id dans un champ caché dans le formulaire, mais c'est comme cela normalement fait. – Klette

6

remplacera votre if form.is_valid() -bloc avec ceci:

if form.is_valid(): 
    form.instance.user = request.user 
    form.save() 
    return redirect('home') 
Questions connexes