我正在制作一个选举信息应用程序,我希望允许当前登录的用户能够宣布自己,并且只有他自己作为选举中的候选人。
我正在使用Django的内置ModelForm和CreateView。我的问题是Run for Office表单(换句话说,'创建候选人'表单)允许用户选择数据库中的任何用户来制作候选人。
我希望Run for Office中的用户字段自动设置为当前登录的用户,并且要隐藏此值,因此登录用户无法将该字段的值更改为其他人。
views.朋友
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.朋友
class CandidateForm(forms.ModelForm):
class Meta:
model = Candidate
models.朋友
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-fields-to-use)
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())