Django Form Choices: select options из БД
На одном сайте на Django весит форма регистрации на закрытые вечеринки, в общем обычный contact form, но только периодически меняется название этих вечеринок.
Так выглядит обычный ChoiceField (froms.py):
Для того чтобы хранить данные в БД создал модель (models.py):
И заменил в форме PARTY_CHOICES на:
Дальше в admin.py добавил admin.site.register(Party), и всё работает. Ура!
Но как бы не так, PARTY_CHOICES кэшируется в forms.py, то есть при добавление/изменении вечеринок в базе, форма меняется только после рестарта Джанги.
Решение оказалось ещё проще - использование forms.ModelChoiceField (forms.py):
Теперь с ModelChoiceField всё работает как надо, форма меняется сразу после изменении в админке, но вот только остался вопрос с кэшированием в forms.py
Так выглядит обычный ChoiceField (froms.py):
from django import forms
PARTY_CHOICES = (
(1, u'Вечеринка 1'),
(2, u'Вечеринка 2'),
)
class ContactForm(forms.Form):
name = forms.CharField(required=True)
phone = forms.CharField(required=True)
party = forms.ChoiceField(choices=PARTY_CHOICES)
Для того чтобы хранить данные в БД создал модель (models.py):
class Party(models.Model):
name = models.CharField('Название', max_length=200)
def __unicode__(self):
return u'%s' % (self.name)
И заменил в форме PARTY_CHOICES на:
from django import forms
from models import Party
PARTY_CHOICES = [
(party.id, party.name) for party in Party.objects.all()
]
class ContactForm(forms.Form):
name = forms.CharField(required=True)
phone = forms.CharField(required=True)
party = forms.ChoiceField(choices=PARTY_CHOICES)
Дальше в admin.py добавил admin.site.register(Party), и всё работает. Ура!
Но как бы не так, PARTY_CHOICES кэшируется в forms.py, то есть при добавление/изменении вечеринок в базе, форма меняется только после рестарта Джанги.
Решение оказалось ещё проще - использование forms.ModelChoiceField (forms.py):
...
party = forms.ModelChoiceField(queryset=Party.objects.all())
Теперь с ModelChoiceField всё работает как надо, форма меняется сразу после изменении в админке, но вот только остался вопрос с кэшированием в forms.py
Ярлыки: django
Комментарии: 1:
В 28 Сентябрь 2009 г. 14:38 ,
justanothercodemonkey.com сказал(а)...
ModelChoiceField - то что нужно!
Спасибо за заметку! :)
Отправить комментарий
Ссылки на это сообщение:
Создать ссылку
<< Главная страница