Hi,
I have the same, so I've decided to live with the following
workaround.

Form.clean() is not reported properly for inlines but
Form.clean_<fieldname>() works fine.
In theory only Form.clean() is recommended for cross field validation
but in fact Form.clean_<fieldname>() can also refer to the other
fields.
However there is one condition. They all shall be defined prior to the
specific field in the model.
It's thanks to sequential processing of fields.
In such situation you can refer to them using cleaned_data hash. If
you need to refer to field which is defined later that there is data
hash but you'll end up in mess in case of Inlines.

Here goes the example. I hope it helps.

class UserProfile(models.Model):
    """
    Place to store extra user information. Editable from Users.
    """
    user = models.ForeignKey(User, verbose_name=_("User"),
unique=True)
    price_variant = models.CharField(_('Price variant'),max_length=1,
choices=PRICE_CHOICES, default='R')
    phone_number = models.CharField(_('Phone number'),max_length=20)
    address_street = models.CharField(_('Address Street'),
max_length=30)
    address_code = models.CharField(_('Address Code'),max_length=6)
    address_city = models.CharField(_('Address City'),max_length=20)
    address_state = models.ForeignKey(State)
    address_country = models.ForeignKey(Country, default=1)
    company_name = models.CharField(_('Company
name'),max_length=20,blank=True)
    euvat = models.CharField(_('EU VAT'),max_length=16,blank=True)

class UserProfileAdminForm(forms.ModelForm):
    class Meta:
        model = UserProfile

    def clean_euvat(self):
        if self.cleaned_data["company_name"] and not
self.cleaned_data["euvat"].strip():
            raise forms.ValidationError('Please provide EU VAT since
you have provided company name.')
        # do something that validates your data
        return self.cleaned_data["euvat"]


Regards,
Mateusz


On Sep 10, 5:19 pm, Wintoon <[EMAIL PROTECTED]> wrote:
> Hello,
>
> I cant seem to figure out if this is working correctly:
>
> In admin.py I put some code (end of message) to validate an inline
> entry. The validation works just fine, however the error message is
> not shown in the appropriate place inline. Is this a bug I should file
> or is there something wrong with my implementation?
>
> .....
>
> class InlineForm(forms.ModelForm):
>     class Meta:
>         model = Inline
>     def clean(self):
>         if ...
>             raise forms.ValidationError('Error message here.')
>         return self.cleaned_data
>
> class StuffInline(admin.TabularInline):
>     model = Inline
>     form = InlineForm
>     extra = 6
>
> class FormAdmin(admin.ModelAdmin):
>    inlines = [StuffInline]
> admin.site.register(Form, FormAdmin)
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to