如何将表单中的用户字段设置为当前登录的用户?

问题描述 投票:21回答:1

我正在制作一个选举信息应用程序,我希望允许当前登录的用户能够宣布自己,并且只有他自己作为选举中的候选人。

我正在使用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)})
django django-forms django-views
1个回答
39
投票
  1. 从渲染形式中删除用户字段(使用excludefieldshttps://docs.djangoproject.com/en/dev/topics/forms/modelforms/#selecting-the-fields-to-useclass CandidateForm(forms.ModelForm): class Meta: model = Candidate exclude = ["user"]
  2. 在创建视图中查找用户配置文件并设置用户字段。 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())
热门问题
推荐问题
最新问题