Tengo un modelo con un ManyToManyField similar a este (el modelo Word tiene una lengua, también):Django ManyToMany validación del modelo
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')
Cuando se trata de añadir una nueva frase (por ejemplo, a través de administración de Django) I obtener 'Sentence' instance needs to have a primary key value before a many-to-many relationship can be used
. Esto significa que no puedo acceder a self.words antes de guardarlo, pero esto es exactamente lo que estoy tratando de hacer. ¿Hay alguna manera de evitar esto para que pueda validar este modelo sin embargo? Realmente quiero validar directamente los campos del modelo.
Encontré muchas preguntas sobre esta excepción, pero no pude encontrar ayuda para mi problema. ¡Apreciaria cualquier sugerencia!
Si quisiera crear una palabra, ¿cómo podría validar que estaba asociada con una oración? No tiene un campo 'oración' en su definición de modelo. – johnklawlor
No todo el mundo usa formularios. Considero esto una falla masiva en Django. ¿Alguien tiene una mejor respuesta? –