Флажки для моделей, две кнопки отправки: добавить модель человека в модель группы, отклонить модель человека из модели группы - PullRequest
1 голос
/ 25 января 2010

Я много раз смотрел на набор форм и набор форм в Django, но все еще не могу придумать, как это сделать.

У меня есть две модели:

Group

Person

У меня есть набор запросов, в котором содержатся все лица, пытающиеся присоединиться к определенной группе: Person.objects.filter(wantsToJoinGroup=groupD)

Теперь, что я хочу сделать, это отобразить страницу с флажком рядом с каждым человеком, который хочет присоединиться к определенной группе. Эти флажки затем можно установить, а затем нажать кнопку «Принять в группу». Я хочу, чтобы это массовое добавление этих людей в определенную группу.

То, что я не понимаю, как это сделать, это в точности флажок. Я пытался расширить modelform, а затем сделать из него formset, но каждый раз терплю неудачу. Кажется, что если я хочу сделать formset с моделями, я должен использовать modelformset, но это не позволяет мне расширять форму, чтобы добавить флажок. Как я могу это сделать?

Вот 10-секундный набросок того, что я хотел бы получить:

альтернативный текст http://img403.imageshack.us/img403/1002/draft.png

Таким образом, это в основном флажок и способ доступа к модели человека в шаблоне, а затем способ обработки этого в представлении.

Заранее спасибо!

Редактировать: Кстати, прежде чем кто-то предложит использовать ModelMultipleChoiceField, если нет способа получить доступ к каждому из объектов внутри него в шаблоне, это не будет выполнять то, что мне нужно сделать. Насколько я знаю, я не могу перебирать объекты ModelMultipleChoiceField в шаблоне. Пожалуйста, поправьте меня, если я ошибаюсь!

Ответы [ 3 ]

1 голос
/ 25 января 2010

Если вы не женаты на идее использования формы модели, я бы просто использовал обычную форму с ModelMultipleChoiceField, дал бы ей набор запросов в __init__, а затем предоставил бы тот же набор запросов в контексте шаблона (для итерации на досуге):

#view
def add_to_group(request):
    persons = Person.objects.filter(wantsToJoinGroup=groupD)
    if request.POST:
        form = PersonAddForm(persons, request.POST)
        if form.is_valid():
            #your handling logic
    form = PersonAddForm(persons)
    context = {'persons': persons, 'form': form}
    return render_to_response(template, context)

#form
class PersonAddForm(forms.Form):
    def __init__(self, queryset, *args, **kwargs):
        super(PersonAddForm, self).__init__(*args, **kwargs)
        self.fields['persons'] = forms.ModelMultipleChoiceField(queryset=queryset,
                                     widget=forms.CheckboxSelectMultiple() )
1 голос
/ 25 января 2010

На самом деле вы можете получить элементы ModelMultipleChoiceField следующим образом:

my_field.field.queryset

где my_field - это экземпляр ModelMultipleChoiceField.

0 голосов
/ 25 января 2010

В верхней части моей головы вы можете вставить скрытое поле под названием «Действие». В событии onclick кнопок «Принять» и «Отклонить» установите значение скрытого поля соответствующим образом и затем отправьте форму.

По вашему мнению, проверьте значение скрытого поля, чтобы выяснить, является ли оно Принятым или Отклоненным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...