简体   繁体   中英

Django Form ChoiceField pass parameter for database query

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM