Как получить текущего пользователя в формах?
В моем проекте Django есть форма. В этой форме я могу назначить человека. Вот моя форма:
class AssignForm(forms.ModelForm):
user = forms.ModelChoiceField(
queryset=UserProfile.objects.filter(is_active=True)
label=_(u'User')
)
class Meta:
model = Customer
fields = ('user',)
Я хочу добавить еще один фильтр в эту форму. Это company
. Я получаю список всех пользователей в этой форме, но я хочу только перечислить пользователей, которые принадлежат компании текущего пользователя.
Так что это должно быть :
queryset=UserProfile.objects.filter(is_active=True, company = current_user.company)
Но я не могу получать запросы из форм. Как я могу с этим справиться?
Вы должны передать request.user
из views.py, чтобы получить его в форме. В вашей форме напишите эту функцию __init__
и передайте пользователя из views.py, и вы сможете получить пользователя. Вы можете получить доступ к пользователю как self.user
в вашей форме
class AssignForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
self.user = kwargs.get('user')
kwargs.pop('user')
В вашем файле views.py вызовите форму следующим образом
form = AssignForm(user=request.user)
Вы переопределяете конструктор формы с:
class AssignForm(forms.ModelForm):
user = forms.ModelChoiceField(
queryset=UserProfile.objects.filter(is_active=True)
label=_(u'User')
)
def __init__(self, *args, user=None, **kwargs):
super().__init__(*args, **kwargs)
if user is not None:
self.fields['user'].queryset = UserProfile.objects.filter(
is_active=True, company__userprofile=user
)
class Meta:
model = Customer
fields = ('user',)
Затем в представлении вы передаете вошедшего пользователя:
from django.contrib.auth.decorators import login_required
@login_required
def my_view(request):
if request.method == 'POST':
form = AssignForm(request.POST, request.FILES, user=request.user)
# …
else:
form = AssignForm(user=request.user)
# …