In my admin for an object Chair
I have a TabularInline
for an arbitrary number of Desk
objects. I want every Chair
to always have at least one Desk
object associated with it. Is there a way to make the admin interface force the user to enter at least one Desk
? Like show an error if no Desk
is entered?
Using akaihola's answer, here is a more complete example:
Add this to your forms.py:
from django import forms
from django.forms.models import BaseInlineFormSet
class AtLeastOneRequiredInlineFormSet(BaseInlineFormSet):
def clean(self):
"""Check that at least one service has been entered."""
super(AtLeastOneRequiredInlineFormSet, self).clean()
if any(self.errors):
return
if not any(cleaned_data and not cleaned_data.get('DELETE', False)
for cleaned_data in self.cleaned_data):
raise forms.ValidationError('At least one item required.')
And then, in your admin.py:
class DeskInline(admin.TabularInline):
model = Desk
formset = AtLeastOneRequiredInlineFormSet
class ChairAdmin(admin.ModelAdmin):
inlines = [DeskInline,]
admin.site.register(Chair, ChairAdmin)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With