Django формы: имеют значение по умолчанию для «выборов», где «выбор» источника из базы данных - PullRequest
2 голосов
/ 21 февраля 2011

Допустим, у меня есть эта форма в моих формах.py:

CATEGORY_CHOICES= ((1,'Cat1'), 
                (2,'Cat2'), 
                (3,'Cat3'), 
                (4,'Cat4'), 
               ) 

class AddMessageForm(forms.Form):
    title = forms.CharField(max_length=250)
    groupname = forms.CharField(widget=forms.HiddenInput) 
    categories = forms.ChoiceField(choices = CATEGORY_CHOICES, required=True) 
    body = forms.CharField(widget=forms.Textarea)

Теперь CATEGORY_CHOICES "жестко запрограммирован".Это работает, но мне нужно добавить CATEGORY_CHOICES в views.py - мне нужно сделать несколько запросов dbqueries, чтобы получить «категории» для каждой группы.

Как бы я это сделал?

PS: мне удалось сделать то же самое для HiddenInput (имя группы) в моем views.py, выполнив что-то вроде этого:

form = AddMessageForm(
            initial={'groupname': groupname},
        )

Надеюсь, я прояснил свой вопрос.Любые разъяснения и т.д., пожалуйста, добавьте комментарий.

С уважением.W

1 Ответ

5 голосов
/ 21 февраля 2011

Установить выбор при построении формы

class AddMessageForm(forms.Form):
....
    def __init__(self, *args, **kwargs):
        self.fields['categories'].choices = \ 
            [(x.id, x.title) for x in MyObject.objects.all()]
        super(AddMessageForm, self).__init__(*args, **kwargs)

Если вы действительно хотите сделать это в views.py, метод тот же.

myform.fields['categories'].choices = \
    [(x.id, x.title) for x in Category.objects.all()]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...