loar
loar

Reputation: 1745

Validate Admin Inline form

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

Answers (1)

Ashish
Ashish

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

Related Questions