| 1 | | |
| 2 | | {{{ |
| 3 | | |
| 4 | | class MyModel(models.Model): |
| 5 | | |
| 6 | | name = models.CharField(maxlength=255) |
| 7 | | |
| 8 | | slug = models.SlugField() |
| 9 | | |
| 10 | | from django.core.validators import ValidationError |
| 11 | | from django.utils.translation import gettext, gettext_lazy |
| 12 | | |
| 13 | | def isUniqueSlug(field_data, all_data): |
| 14 | | if all_data.get('id', None): |
| 15 | | q=MyModel.objects.exclude(id=all_data.get('id')) |
| 16 | | else: |
| 17 | | q=MyModel.objects.all() |
| 18 | | |
| 19 | | try: |
| 20 | | p=q.get(slug__exact=field_data) |
| 21 | | except: |
| 22 | | p=None |
| 23 | | |
| 24 | | if p: |
| 25 | | raise ValidationError, gettext_lazy("Is not a unique slug.") |
| 26 | | |
| 27 | | for f in MyModel._meta.fields: |
| 28 | | if f.name == 'slug': |
| 29 | | f.validator_list.append(isUniqueSlug) |
| 30 | | |
| 31 | | }}} |