I want to create a Django Form ChoiceField. The choices will be queried from an external database and should be filtered by a parameter {company_id}. How to pass this parameter?
views.py
if request.method == 'GET':
company_id = 1
site_id = 3
return render(request, 'sites/new-column.html',
{
'company_id': company_id,
'site_id': site_id,
'form_newcolumn': NewColumn(company_id),
})
forms.py
class NewColumn(forms.Form):
def __init__(self, *args, **kwargs):
company_id = kwargs.pop('company_id')
super(NewColumn, self).__init__(args, kwargs)
self.company_id = company_id # Add it as an instance variable
engine = db.engine("Database")
connection = engine.raw_connection()
cursor = connection.cursor()
cursor.execute(f"SELECT * FROM table WHERE id = '{company_id}' ; ")
all_rows = cursor.fetchall()
choices = forms.ChoiceField(
choices=[(row[0], row[1]) for row in all_rows],
help_text='Make your Choice'
)
How to pass {company_id} to query only the necessary choices?
I have found a solution for me at:
Django Form ChoiceField set choices in View in Form initial
I put the select statement an set the form "choices" and "initial" in views.py without using any def init in class definition.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.