Получение текущего пользователя в Django FormView
Я создаю сайт объявлений, и каждый пользователь связан с компанией. Прежде чем пользователь сможет опубликовать новое объявление, он должен купить кредиты. Если кредитов нет, FormView должен показать шаблон с уведомлением о 0 кредитах, однако если кредитов > 0, то должна появиться настоящая форма.
Я пытаюсь получить данные о текущем пользователе в самом классе FormView
. Я знаю, что это можно сделать через метод form_valid
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 = '/'
Вы можете использовать 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
Вы можете переопределить функцию 'get' следующим образом.
def get(self, request, *args, **kwargs):
if currents_user.ad_credits > 0:
super(Login, self).get(request, *args, **kwargs)
else:
raise HttpResponseBadRequest # Or what kind of error that you like
Надеюсь, это поможет.
Я обнаружил, что добавление объекта текущего пользователя через get_context_data(
) и последующее отображение шаблона на основе {% if current_user.ad_credits > 0 %}
было для меня самым простым решением. Если кредитов мало, шаблон будет показывать только уведомление о том, что пользователь должен пополнить счет.
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['current_user'] = self.request.user
return context