首页 > 解决方案 > 在 Django FormView 中获取当前用户

问题描述

我正在建立一个列表站点,每个用户都链接到一家公司。在用户可以发布新列表之前,它必须已经购买了积分。如果没有信用,FormView 应该显示一个带有 0 信用通知的模板,但是如果信用 > 0 则应该显示实际表单。

我正在努力尝试获取FormView班级本身的当前用户。我知道可以通过form_validmethod完成user = self.request.user,但这意味着用户必须先填写整个表单并在检查他是否有足够的积分后提交。我试图弄清楚如何在表格填写和提交之前进行检查。我找不到资源我怎么能做这样的事情:

class CreateAd(LoginRequiredMixin, FormView):
    if currents_user.ad_credits > 0:
        template_name = 'ads/ad_form.html'
        form_class = AdForm
        success_url = '/'
    else:
        template_name = 'ads/not_enough_credits.html'
        form_class = AdForm
        success_url = '/'

标签: djangodjango-forms

解决方案


您可以使用get_form_kwargs

def get_form_kwargs(self):
    kwargs = super().get_form_kwargs()
    user = self.request.user
    kwargs['initial'] = ... # here update the form kwargs based on user
    return kwargs

推荐阅读