| Version 3 (modified by , 19 years ago) ( diff ) |
|---|
Validation for unique slugs.
Requires a minor change to the admin view.
--- django/contrib/admin/views/main.py (revision 3185)
+++ django/contrib/admin/views/main.py (working copy)
@@ -319,7 +319,7 @@
if request.POST:
new_data = request.POST.copy()
-
+ new_data.update({'id':object_id})
if opts.has_field_type(models.FileField):
new_data.update(request.FILES)
someapp/models.py
class isUniqueSlug:
def __init__(self, slug, app, model):
self.slug, self.app, self.model = slug, app, model
def __call__(self, field_data, all_data):
from django.core.validators import ValidationError
from django.utils.translation import gettext, gettext_lazy
from django.db.models.loading import get_model
model = get_model(self.app,self.model)
if all_data.get('id', None):
q=model.objects.exclude(id=all_data.get('id'))
else:
q=model.objects.all()
try:
d = {self.slug+'__exact': field_data}
p = q.get(**d)
except:
p=None
if p:
raise ValidationError, gettext_lazy("Is not a unique slug.")
class Somemodel(models.Model):
any_slug = models.SlugField(validator_list=[isUniqueSlug('any_slug','someapp','Somemodel')])
Note:
See TracWiki
for help on using the wiki.