Ho un modello con una ManyToManyField simile a questo (il modello di Word ha un linguaggio, troppo):Django ManyToMany validazione del modello
class Sentence(models.Model):
words = models.ManyToManyField(Word)
language = models.ForeignKey(Language)
def clean(self):
for word in self.words.all():
if word.language_id != self.language_id:
raise ValidationError('One of the words has a false language')
Quando si tenta di aggiungere una nuova frase (per esempio attraverso Django admin) I ottenere 'Sentence' instance needs to have a primary key value before a many-to-many relationship can be used
. Ciò significa che non posso accedere a self.words prima di salvarlo, ma questo è esattamente ciò che sto cercando di fare. C'è un modo per ovviare a questo in modo da poter validare questo modello, tuttavia? Voglio davvero convalidare direttamente i campi del modello.
Ho trovato molte domande relative a questa eccezione, ma non sono riuscito a trovare aiuto per il mio problema. Gradirei qualche suggerimento!
Se si desidera creare una parola, come si convaliderà che è stata associata a una frase? Non ha un campo 'frase' nella sua definizione del modello. – johnklawlor
Non tutti usano moduli. Considero questo un enorme difetto in Django. Qualcuno ha una risposta migliore? –