Pergunta

Este problema é muito estranho e eu estou esperando que alguém pode me ajudar. Por uma questão de argumento, eu tenho um modelo do autor com relação ForeignKey ao modelo Book. Quando eu exibir um autor, eu gostaria de ter um ChoiceField que exibe apenas os livros associados a esse autor. Como tal, eu substituir o AuthorForm. Método init () e eu criar uma lista de opções (linhas) com base em uma consulta que filtra livros com base no ID autor. A tupla é um composto da ID do livro e o nome do livro (isto é, (1, 'Moby Dick')). Esses "escolhas" são então atribuídos a atribuir as escolhas do ModelForm.

Quando o formulário torna no modelo, o ChoiceField for exibida adequadamente, listando apenas os livros associados a esse autor.

Este é o lugar onde as coisas ficam estranhas.

Quando eu salvar o formulário, recebo uma ValueError (Não é possível atribuir "u'1' ': Author.book' deve ser uma instância Book) Este erro faz sentido devido à relação FK No entanto, se eu adicionar um.. "imprimir" instrução para o código, faça quaisquer outras alterações, e depois salvar o registro, ele funciona. o ValueError magicamente desaparece. Eu tentei isso várias vezes, garantindo não ter inadvertidamente fez outra mudança, e ele funciona cada vez.

Alguém sabe o que está acontecendo aqui?

Foi útil?

Solução

Não é bem certo que você está fazendo errado, mas o melhor é simplesmente modificar o queryset:

class ClientForm(forms.ModelForm):

    def __init__(self, *args, **kwargs):
        self.affiliate = kwargs.pop('affiliate')
        super(ClientForm, self).__init__(*args, **kwargs)
        self.fields["referral"].queryset = Referral.objects.filter(affiliate = self.affiliate)

    class Meta:
        model = Client

A descrição acima é em linha reta de um dos meus projectos e ele funciona perfeitamente para mostrar somente a remessa objectos relacionados com a filial passou:

form = ClientForm(affiliate=request.affiliate)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top