models.pyДжанго DetailView неспособность найти объект на основе 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'
Это дает мне 404:
Page not found (404)
http://localhost:9999/tag/RandomTag/
No tag found matching the query
Почему Django не извлечь правильный объект, основанный на поле слизняка?
Пульс сохраняется в БД как строчный, поскольку он фильтруется через функцию 'slugify'. Если вы не напишете свою собственную функцию 'slugify', она всегда будет в DB как строчная, поэтому изменение запроса не поможет –
Да, slug является строчным в DB ... **, но slug из URL, очевидно, не является «т **. Это оставляет вам два варианта: вызовите 'str.lower()' в slug или сделайте запрос, нечувствительный к регистру. Хотя изменение случая в строке, вероятно, лучше для БД, изменение запроса на '__iexact' является тривиальным для записи. – meshy
... или просто используйте правильный пул в первую очередь, конечно ... как вы предложили ';)' – meshy