2013-08-15 6 views
17

ここではDjangoとstackoverflow noobがあります。私は選挙情報アプリを作っています。現在ログインしているユーザーが自分でと宣言し、選挙の候補者として自分自身をとすることができるようにしたいと考えています。Djangoでは、現在ログインしているユーザーのフォームにユーザーフィールドを設定するにはどうすればよいですか?

私はDjangoに組み込まれているModelFormとCreateViewを使用しています。私の問題は、Office for Runフォーム(言い換えれば、 '候補の作成'フォーム)は、ユーザがユーザを選択して候補者にすることができることです。

Run for Officeのユーザーフィールドを現在ログインしているユーザーに自動的に設定し、この値を非表示にして、ログインユーザーがフィールドの値を他のユーザーに変更できないようにします。 。読書のための

views.py

class CandidateCreateView(CreateView): 
    model = Candidate 
    form_class = CandidateForm 
    template_name = 'candidate_create.html' 

    def form_valid(self, form): 
     f = form.save(commit=False) 
     f.save() 
     return super(CandidateCreateView, self).form_valid(form) 

forms.py

class CandidateForm(forms.ModelForm): 
    class Meta: 
     model = Candidate 

models.py

class Candidate(models.Model): 
    user = models.ForeignKey(UserProfile) 
    office = models.ForeignKey(Office) 
    election = models.ForeignKey(Election) 
    description = models.TextField() 

    def __unicode__(self): 
     return unicode(self.user) 

    def get_absolute_url(self): 
     return reverse('candidate_detail', kwargs={'pk': str(self.id)}) 

感謝。私はこの問題を数日間してしまいました。あなたの助けに本当に感謝しています。もっと情報が必要な場合は、ご指摘ください。レンダリングされたフォームから

答えて

33
  1. 削除ユーザフィールド作成ビューに

    class CandidateForm(forms.ModelForm): 
        class Meta: 
         model = Candidate 
         exclude = ["user"] 
    
  2. 検索ユーザプロファイルと設定されたユーザフィールド(excludeまたはfieldshttps://docs.djangoproject.com/en/dev/topics/forms/modelforms/#selecting-the-fields-to-useを使用して)。

    class CandidateCreateView(CreateView): 
        ... 
        def form_valid(self, form): 
         candidate = form.save(commit=False) 
         candidate.user = UserProfile.objects.get(user=self.request.user) # use your own profile here 
         candidate.save() 
         return HttpResponseRedirect(self.get_success_url()) 
    
+0

ダン、それは簡単でした。以前は "candidate.user = self.request.user"のようなものを試していましたが、明らかにそれはうまくいきません。これは、私が作る必要がある他のフォームのために便利です、ありがとう! –

+0

candidate.user = self.request.userが動作しないのはなぜですか? self.request.userもユーザオブジェクトではありませんか? – tilaprimera

+0

self.request.userはUserインスタンスですが、Candidate.userはUserProfileインスタンスです。 –

関連する問題