Django DetailView не может разрешить slug для представлений

Я написал такие модели, просмотры и URL-адреса

models.py

class PreventionField(models.Model):
    name = models.SlugField(max_length=200)
    verbose_name = models.CharField(max_length=200)

views.py

class PreventionFieldDetailView(DetailView):
    model = PreventionField
    template_name = 'prevention-fields-details.html'

    template_name = "prevention-field-details.html"
    def get_object(self, **kwargs):
        return PreventionField.objects.get(slug=self.kwargs['slug'])

urls.py

urlpatterns = [
    url(r'^$', Frontpage.as_view(), name='frontpage'),
    path('fields/<slug>/',PreventionFieldDetailView.as_view(),name='fields')]

И я хочу сгенерировать URL-адреса слагов на основе записей в модели PreventionField, которые я могу переключать между подстраницами на моем веб-сайте, например

http://mywebsite.com/fields/neuro где нейро-слизняк из модели, но эта ошибка возврата

FieldError в / fields / neuro /

Невозможно разрешить ключевое слово "slug" в поле. Возможные варианты: id, name, verbose_name

и хорошо, поэтому мне нужно переключиться с «slug» на «name», потому что это мой SlugField в модели PreventionField, верно? Что ж, когда я меняю код views.py на

            return PreventionField.objects.get(slug=self.kwargs['name'])

затем появилась следующая ошибка:

KeyError в / fields / neuro /

'имя'

и теперь я его потерял.

Я не понимаю, почему DetailView работает таким образом и как мне его изменить, чтобы получить URL-адрес слага.

PS

Я должен упомянуть, что у меня не было проблем, когда я использовал pk вместо slug.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
0
682
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы все неправильно поняли. Поле в вашей модели называется name. Так:

return PreventionField.objects.get(name=self.kwargs['slug'])

Хотя было бы намного лучше просто установить slug_field = 'name' на уровне класса в представлении, тогда вам вообще не нужно определять get_object.

Я не понимаю, почему это не работает с моим кодом. Я схожу с ума

Ulvi 19.12.2020 15:39

Другие вопросы по теме