2010-12-13 7 views
0

を保存する前にログインしているユーザの現在のモデルのユーザー・フィールドをセットとしては、私はモデルのフォームを持っているそのジャンゴのModelForm

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

の下に所有者フィールドは、DjangoのUserモデルにリンクされているのForeignKeyがあり、それは対象から除外ですので、フォームにレンダリングされています。 フォームを保存する前に、所有者フィールドを現在ログインしているユーザーに設定しようとしています。 保存機能は次のコードに含まれています。

 

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: 
     .... 
 

私は間違ったことをしています。 私はしばらくdjangoの側に触れていないので、私はどんな助けにも感謝します。

答えて

2

からのアイデアで描画します。

このような何か:

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

おかげで、それはすっきりだし、私は、のModelFormを使用していますビュー機能 – osilocks

0

私自身の質問に答えるには、commit = falseを使い、必要な値を変更してください。 このコードセクションでは、私はいつもsave()メソッドを上書きし、それにユーザーを追加する前の2つの答え(wolPhおよびユーザー***)


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

私は上記WoLphのバリエーションを使用します。

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

に乱雑さを軽減私はオーナーのフィールドに直接アクセスできるとは思わない。所有者フィールドもフォームから除外されます。 – osilocks

関連する問題