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'].
все работает.В чем разница между двумя методами, и как это работает?