Я очень новичок в Django и немного перегружен документацией. Я думаю, что моя проблема довольно проста, но все, что я нашел, только смутило меня.
Я создаю небольшое новостное приложение с моделью NewsItem:
from django.db import models
from django.utils import timezone
# Create your models here.
class NewsItem(models.Model):
title = models.CharField(max_length=50)
newsText = models.TextField()
dateEntered = models.DateTimeField('date entered')
datePublished = models.DateTimeField('date published', blank=True, null=True)
user = models.CharField(max_length=30) #temporary field. will be changed to user foreign key
def __str__(self):
return self.title
def publish(self):
if (self.datePublished == None):
self.datePublished = timezone.now()
def published(self):
return self.datePublished != None
два представления (технически 3 ) индекс и подробности
from django.http import HttpResponseRedirect
from django.shortcuts import render, get_object_or_404
from django.urls import reverse
from django.views import generic
from .models import NewsItem
# Create your views here.
class IndexView(generic.ListView):
template_name = 'news/index.html'
context_object_name = 'latestNewsList'
def get_queryset(self):
return NewsItem.objects.order_by('-datePublished')[:5]
#todo
class DetailView(generic.DetailView):
model = NewsItem
template_name = 'news/detail.html'
def publish(request, itemId):
newsItem = get_object_or_404(NewsItem, pk=itemId)
newsItem.publish()
newsItem.save()
return HttpResponseRedirect(reverse('news:detail', args=(newsItem.id,)))
и urlconf как этот
from django.urls import path
from . import views
urlpatterns = [
path('', views.IndexView.as_view(), name='index'),
path('<int:pk>/', views.DetailView.as_view(), name='detail'),
path('<int:itemId>/publish', views.publish, name='publish'),
]
В подробном представлении у меня есть ссылка Publi sh, которая просто вызывает функцию views.publi sh , Предполагается, что этот вид перенаправляет обратно в подробный вид. Сейчас я пытаюсь отобразить небольшое сообщение (например, успешно опубликованная статья) в подробном представлении, когда оно было перенаправлено представлением publi sh. Но я понятия не имею, что было бы хорошим подходом
Я мог бы просто отобразить шаблон сведений в представлении publi sh, но тогда он все равно сказал бы news / publi sh в URL, а не в news / detail
Заранее спасибо за помощь