Tengo dos modelos (ModelParent y ModelChild) con los mismos campos m2m en el modelo de asunto. ModelChild tiene una clave externa en ModelParent y ModelChild se define como en línea para ModelParent en la página de administración.django - ¿Cómo verificar Check ModelAdmin y sus líneas?
### models.py ###
class Subject(Models.Model):
pass
class ModelParent(models.Model):
subjects_parent = ManyToManyField(Subject)
class ModelChild(models.Model):
parent = ForeignKey(ModelParent)
subjects_child = ManyToManyField(Subject)
### admin.py ###
class ModelChildInline(admin.TabularInline):
model = ModelChild
class ModelParentAdmin(admin.ModelAdmin):
inlines = [ModelChildInline]
admin.site.register(ModelParent, ModelParentAdmin)
tengo una restricción importante, sin embargo, el campo de subjects_child ModelChild no debe hacer referencia a cualquier tema que subject_parent hace con su subjects_parent.
Entonces, si selecciono el mismo Asunto (en subject_parent y subject_child) en la página de administración para ambos modelos, ¿cómo puedo validar esto? Si solo cambia un campo, valídelo contra el db, pero ¿qué ocurre si ambos cambian (subject_parent y subject_child)? ¿Cómo puedo validar ambos formularios juntos antes de guardar?
¿Por qué no validarlo en el clean() para el formulario, no en el field_specific clean? De esta forma, todos los campos que deberá verificar se habrán limpiado previamente. Lo único de lo que no estoy seguro es si puede alcanzar ambos conjuntos de datos, o solo los datos para el ModelParent en el clean() ... –
Thx para sugerencia. Ya lo hice, pero con formularios solo puedo validar formularios principales (formularios para ModelParentAdmin) e inilines formset por separado (solo frente a db). El único lugar donde puedo acceder juntos es en la clase ModelParentAdmin. Pero esa clase no tiene un método clean(). Puedo pensar validarlos antes de svaing en el método save_formsets (...) de esta clase, pero al levantar ValidationError ("error") nada lo atrapa. – blazt