формы django: редактирование нескольких наборов связанных объектов в одной форме

Я пытаюсь сделать то, что должно быть очень распространенным: добавить / отредактировать несколько связанных моделей в одном форма.Например:

Visitor Details:
Select destinations and activities:
    Miami  []   -  swimming [], clubbing [], sunbathing[]
    Cancun []   -  swimming [], clubbing [], sunbathing[]

Мои модели - это посетитель, пункт назначения и действие, при этом посетитель имеет поле ManyToMany в пункте назначения через промежуточную модель VisitorDestination, которая содержит подробную информацию о действиях, которые необходимо выполнить в пункте назначения (само по себе поле ManyToMany в Деятельность).

Visitor ---->(M2M though VisitorDestination) -------------> Destination
                                            |
                       activities            ---->(M2M)---> Activity  

Обратите внимание, что я не хочу вводить новые значения назначения / активности, просто выберите из доступных в базе данных (но это совершенно законное использование полей M2M, верно? )

Мне это кажется чрезвычайно распространенной ситуацией (отношение многих ко многим с дополнительными деталями, которые являются полем FK или M2M в какой-то другой модели), и это выглядит как наиболее разумное моделирование, но, пожалуйста, поправьте меня, если я ошибаюсь.

Я потратил несколько дней на поиск Django docs / SO / googling, но не смог понять, как с этим справиться. Я пробовал несколько подходов:

  1. Форма пользовательской модели для посетителя, где я добавляю поля с множественным выбором для пункта назначения и действия. Это работает нормально, если пункт назначения и действие могут быть выбраны независимо, но здесь они коррелированы , т.е. я хочу выбрать одно или несколько действий для каждого пункта назначения

  2. Используя inlineformset_factory для создания набора форм назначения / действий с inlineformset_factory (Destination, Visitor) . Это не работает, потому что посетитель имеет отношение M2M к пункту назначения, а не FK.

  3. Настройка простого набора форм с использованием formset_factory , например DestinationActivityFormSet = formset_factory (DestinationActivityForm, extra = 2) . Но как спроектировать DestinationActivityForm ? Я недостаточно изучил это, но это выглядит не очень многообещающе: я не хочу вводить пункт назначения и список действий, мне нужен список флажков с метками, установленными для пункта назначения / действий, которые я хочу для выбора, но formset_factory вернет список форм с идентичными метками.

Я полный новичок в django, так что, возможно, решение очевидно, но я считаю, что документация в этой области очень слабая - если у кого-то есть указатели на примеры использования форм / наборов форм, которые также были бы полезны

спасибо!

6
задан xuloChavez 30 November 2011 в 21:24
поделиться