Как передать дополнительную информацию в форму в Django

У меня есть следующая форма, которая должна возвращать набор запросов Cashpool, где cashpool__name=request.user.company.cashpool. Чтобы выполнить правильный запрос, ему необходима информация из представления.

# views.py

class AddAccountForm(forms.Form):

    # The entity on whose behalf the account shall be added
    company = forms.ModelChoiceField(queryset=Company.objects.get(name=....))

    ...

Есть ли способ передать дополнительный аргумент форме в представлении, чтобы сделать объект пользователя доступным в форме, чтобы она могла как-то получить правильный набор запросов?

# forms.py

def add_account(request):

    # Return the form on get request
    if request.method == 'GET':
        form = AddAccountForm()

    ...

Вот как можно сделать, чтобы передать некоторые отфильтрованные исходные данные в форму в Django. Просто переопределите атрибут base_fields формы.

views.py

def add_account(request):
    if request.method == 'GET':
        # Retrieve the form initial value
        company_name = request.user.company.name
        cashpool= Cashpool.objects.get(name=company_name)
        
        # Override the AddAccountForm company field
        AddAccountForm.base_fields['company'] = forms.ModelChoiceField(
        queryset=cashpool)

        # Instantiate the form now
        form = AddAccountForm()

        # Other code here ...

NB : Я использовал forms.ModelChoiceField в коде, но вы можете использовать другое поддерживаемое поле формы.

Вернуться на верх