私は選挙情報アプリを作成していますが、現在ログインしているユーザーが自分自身および自分だけを候補者として宣言できるようにしたいです選挙で。
Djangoの組み込みModelFormとCreateViewを使用しています。私の問題は、Run for Officeフォーム(つまり、「候補者の作成」フォーム)を使用すると、ユーザーがデータベース内のanyユーザーを選択できることです。候補者を作る。
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)})
レンダリングされたフォームからユーザーフィールドを削除します(exclude
またはfields
を使用、 https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#selecting-the -使用するフィールド )
class CandidateForm(forms.ModelForm):
class Meta:
model = Candidate
exclude = ["user"]
作成ビューでユーザープロファイルを検索し、ユーザーフィールドを設定します。
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())