Я развернул приложение блога Django в Heroku, и у меня возникли проблемы с доступом к объектам через их идентификатор.
Когда Debug = True в settings.py, все работает нормально.
И дажекогда Debug = False, нет другой проблемы, такой как проблема статических файлов, все работает нормально.Я искал много статей, но большинство из них касалось статических файлов, а не моей ситуации.
Во-первых, Мои models.py:
class Post(models.Model):
title = models.CharField(verbose_name='TITLE', max_length=120)
slug = models.SlugField(verbose_name='SLUG', unique=True, allow_unicode=True, max_length=120)
content = RichTextUploadingField(verbose_name='POST CONTENT')
create_date = models.DateTimeField(verbose_name='Created date', auto_now_add=True)
author = models.ForeignKey(User, null=True, on_delete=models.CASCADE)
class Bookmark(models.Model):
title = models.CharField(max_length=100)
slug = models.SlugField(verbose_name='SLUG', unique=True, allow_unicode=True, max_length=100)
address = models.URLField(verbose_name='url', unique=True)
description = models.CharField(max_length=256)
category = models.ForeignKey(BookmarkCategory, on_delete=models.CASCADE, null=True, blank=True)
И в urls.py:
path('post/<int:id>/', views.PostDetailView.as_view(), name='post_detail'),
path('bookmark/<int:id>/update/', views.BookmarkUpdateView.as_view(), name='bookmark_update'),
Проблема возникает при попыткечтобы получить доступ к моему объекту Post или Bookmark в шаблонах, используя id, например:
{% url 'myblog:post_detail' post.id %}
или
{% url 'myblog:bookmark_update' bookmark.id %}
Я ожидаю, что это DetailView или UpdateView объектов, но вместо этого у меня есть внутренняя ошибка сервера (показывается мой 500.html.)
Я тоже попробовал int: pk вместо int: id, но просто та же ошибка.
Сновавсе прекрасно, когда Debug = True, а также все остальное работает нормально, даже когда Debug = False.
Есть несколько archiveView, основанных на модели Post и функции поиска и т. д., все они работают.
Поэтому я попытался изменить urls.py следующим образом:
path('post/<slug>/', views.PostDetailView.as_view(), name='post_detail'),
path('bookmark/<slug>/update/', views.BookmarkUpdateView.as_view(), name='bookmark_update'),
И тогда это просто работает!Я могу видеть представления, которые я запрашивал, используя слагов из шаблонов.Проблема возникает, только когда я пытаюсь получить доступ к объектам, используя ID объекта.
Так что я предполагаю, что есть некоторая проблема с postgreSQL, возможно, некоторая проблема с тем, как он хранит ID объектов (возможно, потому что IDне определено явно в models.py?), потому что, когда я работал с SQLite3 локально, не было проблем с доступом через ID объектов.
На данный момент я могу просто избежать этой проблемыиспользуя slug вместо int: id, но я хочу использовать int: id, потому что основанные на slug URL слишком избыточны.
Пожалуйста, кто-нибудь может помочь определить, в чем проблема и какое решение может быть?