Django forms - в чем разница между form.fields и class var?

Я хотел сделать выпадающий список, который удаляет данные при нажатии кнопки submit.

<form method="post">
    <label for="id_title">Select:</label> 
    <select name="title" id="id_title">
        <option value="Return of the Jedi">Return of the Jedi</option>
        <option value="The Force Awakens">The Force Awakens</option>
    </select>
    <input type="submit" value="remove">
</form>

и мой views.py:

def remove(request):
    if request.method == 'POST':
        form = forms.TitleDropDownForm(request.POST)
        if form.is_valid():
            (col_name, val), = form.cleaned_data.items()
            psy.delete_movie_from_table(
                table='ex04_movies',
                col_name=col_name,
                val=val
            )

        return redirect(request.META.get('HTTP_REFERER'))
    else:
        form = forms.TitleDropDownForm()

    form.reload()
    return render(request, 'ex04/remove.html', context={'form' : form})

forms.py:

class TitleDropDownForm(forms.Form):

    def get_title():
        try:
            conn = psycopg2.connect(database='djangotraining', user='djangouser', password='secret')
            try:
                cur = conn.cursor()
                cur.execute("""
                    SELECT title FROM %s;
                    """ % ('ex04_movies', )
                )
                res = cur.fetchall()
            except Exception as e:
                return []
            else:
                conn.commit()
                conn.close()
                cur.close()
                ret = []
                for tup in res:
                    ret.append((tup[0], tup[0]))
                return ret

        except Exception as e:
            return ret

    title = forms.ChoiceField(label='Select', choices=get_title())

    def reload(self):
        # TitleDropDownForm.title = forms.ChoiceField(label='Select', choices=TitleDropDownForm.get_title())
        self.fields['title'] = forms.ChoiceField(label='Select', choices=TitleDropDownForm.get_title())

Когда я попробовал перезагрузить форму с class var как комментарий, страница не отобразила измененную БД должным образом. Но после изменения Form.title на self.fields['title'].

все работает.

В чем разница между двумя методами, и как это работает?

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