2010-03-16 2 views
0

J'ai un objet Tâche et un formulaire qui l'enregistre. Je veux automatiquement créer un champ created_by pour l'utilisateur actuellement connecté. Donc, mon point de vue est le suivant:Comment ajouter une valeur par défaut sur le formulaire de sauvegarde django?

def new_task(request, task_id=None): 
    message = None 
    if task_id is not None: 
     task = Task.objects.get(pk=task_id) 
     message = 'TaskOK' 
     submit = 'Update' 

    else: 
     task = Task(created_by = GPUser(user=request.user)) 
     submit = 'Create' 

    if request.method == 'POST': # If the form has been submitted... 
     form = TaskForm(request.POST, instance=task) 
     if form.is_valid(): 
      task = form.save(commit=False); 
      task.created_by = GPUser(user=request.user) 
      task.save() 
      if message == None: 
       message = 'taskOK' 
      return tasks(request, message) 
    else: 
     form = TaskForm(instance=task) 
    return custom_render('user/new_task.html', 
         {'form': form, 'submit': submit, 'task_id':task.id}, 
         request) 

Le problème est, vous l'aurez deviné, le champ created_by n'est pas enregistré. Des idées? Merci

Répondre

2

Vous créez GPUser, mais vous ne l'enregistrez pas. Vous devez l'enregistrer en premier, donc il devient pk et seulement après cela, il peut être affecté à un ForeignKey. Essayez ceci:

task.created_by = GPUser.object.create(user=request.user) 

ou

gpuser = GPUser(user=request.user) 
gpuser.save() 
task.created_by = gpuser 
+0

OK, je suis un idiot. GPUser est en fait le profil de l'utilisateur, et ce dont j'ai besoin est de le récupérer au lieu d'en créer un nouveau. – Nacho

Questions connexes