Заполните данные поля формы Django данными Db - PullRequest
7 голосов
/ 20 января 2011

Я пытаюсь предварительно заполнить поле формы данными из объекта Db.Как настроить форму, представление и модель для заполнения поля этими данными?

Цель состоит в том, чтобы позволить пользователю выбирать только те данные, которые запрашиваются из объекта.Ex.На событии воспроизводятся группы, пользователь выбирает свою любимую группу из тех, что на событии.

Я пытался просмотреть документы для form.data - но не могу найти то, что я ищу.

Спасибо!

Ответы [ 2 ]

4 голосов
/ 20 января 2011

Предположим, что ваша модель событий имеет полосы в виде ключа Many-2-Many, расположение форм и представлений будет следующим:

forms.py:

class EditEventForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(EditEventForm, self).__init__(*args, **kwargs)
        self.fields['bands'].queryset= \
                      Bands.objects.filter(Q(name='band1')|Q(name='band2'))
    class Meta:
        model = Event

ПРИМЕЧАНИЕ:Вам необходимо настроить выборку набора запросов в формах по вашему требованию.

views.py:

form = EditEventForm(instance=event)

Более того, в соответствии с предложением, данным dcrodjer, продолжайте и прочитайте некоторыетекст о реализации ModelMultipleChoiceField

1 голос
/ 20 января 2011

Вы можете получить немного больше возможностей, передав аргументы в форму

class SelectBandForm(forms.Form):
def __init__(self, event, *args, **kwargs):
    super(EditEventForm, self).__init__(*args, **kwargs)
    self.fields['bands'] = forms.ModelChoiceField(label="Whats your favorite band?",
               empty_label="Select a Band" , querset=Bands.objects.filter(event=event))

Тогда в твоих взглядах

if request.method =="POST":
   form = SelectBandForm(event, request.POST)
   if form.is_valid():
        #do stuff
else:
   form = SelectBandForm(event)
   #show it
...