Konu modelinde aynı m2m alanlara sahip iki modelim (ModelParent ve ModelChild) var. ModelChild, ModelParent üzerinde bir dış tuşa sahiptir ve ModelChild, admin sayfasında ModelParent için satır içi olarak tanımlanmıştır.django - ModelAdmin ve satır içi çizgileri nasıl geçilir?
### 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)
olsa önemli bir kısıtlama var ModelChild en subjects_child alan subject_parent onun subjects_parent ile yaptığı herhangi konuyu başvuru olmamalıdır.
Dolayısıyla, her iki model için de Yönetici sayfasında aynı Konuyu (subject_parent ve subject_child) seçersem, bunu nasıl doğrulayabilirim? Yalnızca bir alan değişirse, onu db'ye göre doğrularsınız, ancak her ikisi de değişirse (subject_parent ve subject_child)? Her iki formu da kaydetmeden önce nasıl doğrulayabilirim?
Neden form için temiz() içinde doğrulamıyor, alan_spesifik temiz değil? Bu şekilde, kontrol etmeniz gereken tüm alanlar önceden temizlenmiş olacaktır. Emin olmadığınız tek şey, her iki veri kümesine de ulaşıp ulaşamayacağınız, ya da sadece temizlik için() ModelParent'in verilerinin() ... –
Thx'i öneri olarak alabilir. Bunu zaten yaptım, ancak formları ile sadece ana formu (ModelParentAdmin için form) doğrulayabilir ve ayrı ayrı formüle edebilir (yalnızca db'ye karşı). Onlara birlikte erişebildiğim tek yer ModelParentAdmin sınıfında. Ancak bu sınıfın bir clean() yöntemi yoktur. Bu sınıfın save_formsets (...) yönteminde aramadan önce onları doğrulayabileceğimi düşünebilirim, ancak ValidationError ("error") 'i yükseltmek üzerine hiçbir şey yakalanmaz. – blazt