django forms: editando vários conjuntos de objetos relacionados em um único formulár
Estou tentando fazer algo que deve ser muito comum: adicione / edite vários modelos relacionados em um único formulário. Por exemplo
Visitor Details:
Select destinations and activities:
Miami [] - swimming [], clubbing [], sunbathing[]
Cancun [] - swimming [], clubbing [], sunbathing[]
Meus modelos são Visitor, Destination e Activity, com Visitor tendo um campo ManyToMany em Destination por meio de um modelo intermediário, VisitorDestination, que possui os detalhes das atividades a serem realizadas no destino (em si, um campo ManyToMany em Activity
Visitor ---->(M2M though VisitorDestination) -------------> Destination
|
activities ---->(M2M)---> Activity
Note que eu não quero entrarNov valores de destino / atividade, apenasescolhe daqueles disponíveis no banco de dados (mas esse é um uso perfeitamente legítimo dos campos M2M, certo?)
Para mim, isso parece uma situação extremamente comum (uma relação muitos para muitos com detalhes adicionais que são um campo FK ou M2M em outro modelo), e essa parece ser a modelagem mais sensata, mas, por favor, corrija-me se estiver errado .
Passei alguns dias pesquisando docs / SO / googling do Django, mas não consegui descobrir como lidar com isso. Eu tentei várias abordagens:
Modelo de modelo personalizado para Visitor, onde adiciono campos de múltipla escolha para Destino e Atividade. Isso funciona bem se Destino e Atividade puderem ser selecionados independentemente, mas aqui estão eles correlacionado, ou seja, desejo escolher uma ou várias atividades paracad destination
Usinginlineformset_factory
para gerar o conjunto de formulários de destino / atividades, cominlineformset_factory(Destination, Visitor)
. Isso é interrompido porque o Visitante tem uma relação M2M com Destino, em vez de um FK.
Personalizando um formset simples, usandoformset_factory
, por exemploDestinationActivityFormSet = formset_factory(DestinationActivityForm, extra=2)
. Mas como projetarDestinationActivityForm
? Ainda não explorei o suficiente, mas não parece muito promissor: não quero digitar o destino e uma lista de atividades, quero uma lista de caixas de seleção com os rótulos definidos para o destino / atividades que desejo para selecionar, mas oformset_factory
retornaria uma lista de formulários com rótulos idêntico
Eu sou um novato completo com django, então talvez a solução seja óbvia, mas acho que a documentação nesta área é muito fraca - se alguém tiver algumas dicas para exemplos de uso de formulários / conjuntos de formulários que também seriam úteis
obrigado