Form (ou Formset?) Para lidar com múltiplas linhas de tabela em Django

votos
3

Eu estou trabalhando em minha primeira aplicação Django. Em suma, o que ele precisa fazer é exibir uma lista de títulos de filmes, e permitir aos usuários dar uma classificação (de 10) para cada filme. Eu fui capaz de usar o `forma` e `formset sintaxe` em um modelo para produzir uma forma que permite avaliar um filme de cada vez, o que corresponde a uma linha em uma tabela MySQL, mas como faço para produzir uma forma que itera sobre todos os títulos de filmes no banco de dados e produz uma forma que lhe permite avaliar muitos deles de uma vez?

No início, eu pensei que isso era o que formsets fosse, mas eu não consigo ver nenhuma forma de interagir automaticamente sobre o conteúdo de uma tabela de banco de dados para produzir itens para ir na forma, se você ver o que quero dizer.

Atualmente, minha views.py tem este código:

def survey(request):
        ScoreFormSet = formset_factory(ScoreForm)
        if request.method == 'POST':
                formset = ScoreFormSet(request.POST, request.FILES)
                if formset.is_valid():
                        return HttpResponseRedirect('/')
        else:
                formset = ScoreFormSet()
        return render_to_response('cf/survey.html', {
                'formset':formset,
        })

E meu survey.html tem essa:

<form action=/survey/ method=POST>
<table>
` formset `
</table>
  <input type = submit value = Submit>
</form>

Oh, e a definição de ScoreForm e Pontuação das models.py são:

class Score(models.Model):
        movie = models.ForeignKey(Movie)
        score = models.IntegerField()
        user = models.ForeignKey(User)

class ScoreForm(ModelForm):
        class Meta:
                model = Score

Assim, caso o acima não é clara, o que eu estou com o objetivo de produzir uma forma que tem uma linha por filme, e cada linha mostra um título, e tem uma caixa para permitir que o usuário digite a sua pontuação.

Se alguém pode me apontar para o tipo certo de abordagem a este, eu ficaria muito grato.

Publicado 18/11/2008 em 14:55
fonte usuário
Em outras línguas...                            


2 respostas

votos
3

"No início, eu pensei que isso era o que formsets fosse, mas eu não consigo ver nenhuma forma de interagir automaticamente sobre o conteúdo de uma tabela de banco de dados para produzir itens para ir na forma, se você ver o que quero dizer."

Você precisa obter um queryset. E você precisa prever que queryset ao seu formulário como dados iniciais. Veja usando dados iniciais com um formset para o código.

initial = [ list of { dictionaries }, one per form ] 

Curiosamente, esta é uma característica direta do modelo API através do valuesmétodo de um queryset.

Respondeu 18/11/2008 em 15:12
fonte usuário

votos
1

Eu encontrei a minha resposta, usando modelformset_factory vez formset_factory resolve o problema, Graças ...

Respondeu 30/01/2009 em 09:22
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more