2010-12-13 3 views
0

j'ai une forme de modèle comme si dessousDéfinir un modèle champ utilisateur à l'utilisateur connecté actuel utilisateur avant d'enregistrer son django ModelForm

class JobForm(ModelForm): 
    class Meta: 
     model = Job 
     exclude = ('date_added', 'date_modified','owner','status','tags','slug','winning_tech','completiondate') 

Le champ propriétaire est un foreignKey lié au modèle de l'utilisateur Django et il est exclu de étant rendu dans la forme. J'essaie de définir le champ propriétaire de l'utilisateur connecté avant de sauvegarder le formulaire. Ma fonction de sauvegarde est contenue dans le code suivant.

 

def createJob(request): 
    bix_user=getBixUser(request.user) 
    if request.method == 'POST': 
     form = JobForm(request.POST) 
     form.fields['owner']=bix_user 
     if form.is_valid(): 
     form.save() 

     return HttpResponseRedirect('/home') 
else: 
     .... 
 

Je suis très sûr que je fais la mauvaise chose. Je n'ai pas été en contact avec mon côté Django pendant un moment, donc j'apprécierais toute aide.

Répondre

2

Je remplace toujours la méthode save() et ajouter un utilisateur à lui.

Quelque chose comme ceci:

class JobForm(ModelForm): 
    def save(self, user, commit=True): 
     job = ModelForm.save(commit=False) 
     job.owner = user 
     if commit: 
      job.save() 
     return job 
+0

Merci, c'est plus propre et réduit l'encombrement dans la fonction de vue – osilocks

0

Donc répondu à ma propre question, utilisez commit = false et modifiez les valeurs que vous voulez. Cette section de code dessine dans les idées des deux réponses précédentes (Wolph et utilisateur ***)


def save(self,user, commit=True, *args, **kwargs):

job = super(JobForm, self).save(commit=False,*args, **kwargs) job.owner = user if commit: job.save() return job

0

J'utilise une variation sur Wolph ci-dessus:

def save(self, *args, **kwargs): 
    # add defaut owner field if not already stated 

    if 'owner' not in self.__dict__: 
     self.creator = system_user() 

    super(MyModel, self).save(*args, **kwargs) 
+0

J'utilise un ModelForm, donc Je ne pense pas que je peux accéder au champ propriétaire directement. Le champ propriétaire est également exclu du formulaire. – osilocks

Questions connexes