Reputation: 1745
I the Admin interface, I need to validate a field which is inside an Inline. Site has a name which has to be stored in lowercase.
How can I access to the name field in the inline to perform that validation?
I could also override its save method in models but I'd like to know how to do it in admin.
class SiteInline(admin.TabularInline):
model = Site
classes = ('grp-collapse grp-open',)
inline_classes = ('grp-collapse grp-open',)
class CompanyAdmin(admin.ModelAdmin):
ordering = ['name']
inlines = (SiteInline, )
Upvotes: 0
Views: 1198
Reputation: 354
You can use Regex to validate the field.
admin.py
from django import forms
from django.contrib import admin
from django.core import validators
from django.utils.translation import ugettext_lazy as _
from .models import Company, Site
class SiteInlineAdminForm(forms.ModelForm):
name = forms.CharField(max_length=16,
help_text=_('Required. lower case character For Example: test'),
validators=[
validators.RegexValidator(r'^[a-z]*$',
message=_('Enter a valid name. This value may contain only lower case character.')),
])
class Meta:
model = Site
exclude = ()
class SiteInline(admin.TabularInline):
model = Site
form = SiteInlineAdminForm
classes = ('grp-collapse grp-open',)
inline_classes = ('grp-collapse grp-open',)
class CompanyAdmin(admin.ModelAdmin):
ordering = ['name']
inlines = (SiteInline, )
admin.site.register(Company, CompanyAdmin)
Upvotes: 2