Django Form Choices: select options из БД
Так выглядит обычный 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 models import Party
PARTY_CHOICES = [(party.id, party.name) for party in Party.objects.all()]
Дальше в 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




