models.pyDjango DetailView ne pas trouver l'objet basé sur SLUG
class Tag(models.Model):
name = models.CharField(max_length=64, unique=True)
slug = models.SlugField(max_length=255, unique=True)
def save(self, *args, **kwargs):
self.slug = slugify(self.name)
super(Tag, self).save(*args, **kwargs)
urls.py
url(r'^tag/(?P<slug>[A-Za-z0-9_\-]+)/$',
TagDetailView.as_view(),
name='tag_detail'),
views.py
class TagDetailView(DetailView):
model = Tag
template_name = 'tag_detail_page.html'
context_object_name = 'tag'
Cela me donne une erreur 404:
Page not found (404)
http://localhost:9999/tag/RandomTag/
No tag found matching the query
Pourquoi Django ne parviennent pas à récupérer l'objet correct sur la base du champ slug?
Le slug est enregistré dans la base de données en minuscules car il est filtré via la fonction 'slugify'. Sauf si vous écrivez votre propre fonction slugify, elle sera toujours dans la base de données en minuscules, donc la modification de la requête n'aidera pas –
Oui, le slug est en minuscules dans la base de données ... ** mais le slug de l'URL est évidemment 't **. Cela vous laisse deux choix: appelez 'str.lower()' sur le slug, ou faites une requête insensible à la casse. Bien que changer la casse sur la chaîne soit probablement meilleur pour DB, changer la requête pour être '__iexact' est trivial à écrire. – meshy
... ou utilisez simplement la bonne limace à la première place bien sûr ... comme vous l'avez suggéré ';)' – meshy