Domanda

Il problema è molto strano e spero che qualcuno mi può aiutare. Per amor di discussione, ho un modello Autore con rapporto ForeignKey al modello Libro. Quando visualizzo un autore, mi piacerebbe avere un ChoiceField che visualizza solo i libri associati a tale autore. Come tale, sovrascrivo l'AuthorForm. Metodo init () e creo un elenco di scelte (tuple) sulla base di una query che filtra i libri basati sul ID autore. La tupla è un composito dell'ID libro e il nome del libro (cioè, (1, 'Moby Dick')). Quei "scelte" vengono poi assegnati alle scelte del ModelForm attributo.

Quando il form rende nel modello, il ChoiceField viene visualizzato correttamente, elencando solo i libri associati a tale autore.

Questo è dove le cose si fanno strane.

Quando ho salvare il modulo, ricevo un ValueError (non può assegnare "u'1' ': Author.book' deve essere un'istanza Libro) Questo errore ha senso a causa del rapporto FK Tuttavia, se si aggiunge a.. "print" istruzione al codice, fare altri cambiamenti, e quindi salvare il record, funziona. la ValueError scompare magicamente. ho provato questo un certo numero di volte, garantendo non ho inavvertitamente fatto un altro cambiamento, e funziona ogni volta.

Qualcuno sa cosa sta succedendo qui?

È stato utile?

Soluzione

Non del tutto sicuro di quello che si sta facendo male, ma è meglio di modificare solo il set di query:

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

È possibile che questo è uscito da uno dei miei progetti e funziona perfettamente per mostrare solo gli oggetti Referral legati alla filiale passato:

form = ClientForm(affiliate=request.affiliate)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top