Не могу сделать ссылку из админки на созданную новость с помощи reverse
from django.db import models
from django.urls import reverse
class News(models.Model):
title = models.CharField(max_length=150, verbose_name='Наименование')
content = models.TextField(blank=True, verbose_name='Контент')
created_at = models.DateTimeField(auto_now_add=True, verbose_name='Дата публикации')
updated_at = models.DateTimeField(auto_now=True, verbose_name='Дата обновления')
photo = models.ImageField(upload_to='photos/%Y/%m/%d/', verbose_name='Фото', blank=True)
is_published = models.BooleanField(default=True, verbose_name='Опубликовано')
category = models.ForeignKey('Category', on_delete=models.PROTECT, null=True, verbose_name='Категория')
def get_absolut_url(self):
return reverse('view_news', kwargs={"news_id": self.pk})
def __str__(self):
return self.title
class Meta:
verbose_name = 'Новость'
verbose_name_plural = 'Новости'
ordering = ['-created_at']
class Category(models.Model):
title = models.CharField(max_length=150, db_index=True, verbose_name='Наименование категории')
def get_absolut_url(self):
return reverse('category', kwargs={"category_id": self.pk})
def __str__(self):
return self.title
class Meta:
verbose_name = 'Категория'
verbose_name_plural = 'Категории'
ordering = ['title']
get_absolute_url - не нужен.
index.html
<a href="{% url 'view_news' item.id %}" class="btn btn-primary">Подробнее...</a>
urls.py (через DetailView)
path('news/<int:pk>', view_news.as_view(), name='view_news')
urls.py (через функцию)
path('news/<int:pk>', view_news, name='view_news')
views.py (через DetailView)
from django.views.generic import DetailView
class view_news(DetailView):
model = News
template_name = 'news/view_news.html'
context_object_name = 'news_item'
views.py (через функцию)
def view_news(request, item_id):
# news_item = News.objects.get(pk=item_id)
news_item = get_object_or_404(News, pk=item_id)
return render(request, 'news/view_news.html', {"news_item": news_item})