 <p>Assuming your <code>clean_name</code> method is on a ModelForm, you can access the associated model instance at <code>self.instance</code>. Second, a simple way to tell if a model instance is newly created, or already existing in the database, is to check the value of its primary key. If the primary key is <code>None</code>, the model is newly created.</p> <p>So, your validation logic could look something like this:</p> <pre><code>def clean_name(self): name = self.cleaned_data['name'].title() qs = Country.objects.filter(name=name) if self.instance.pk is not None: qs = qs.exclude(pk=self.instance.pk) if qs.exists(): raise forms.ValidationError("There is already a country with name: %s" % name) </code></pre> <p>I've only shown one query set for clarity. I'd probably create a tuple containing all three querysets, and iterate over them. The code for adding the exclude clause, and the call to <code>exists()</code> could all be handled inside the loop, and therefore only needs to be written once (DRY).</p>