I have two options for my articles in my django website: "draft" and "published" I wrote sth that helps me show only the articles that are on "published" status in admin page. But the code doesn't work. when I click on the specified category for each article, even the draft ones show up. How can I fix it? #################
#models.py
from django.db import models
from django.utils import timezone
# my managers
class ArticleManager(models.Manager):
def published(self):
return self.filter(status='Published')
# Create your models here.
class Category(models.Model):
title = models.CharField(max_length=300, verbose_name="Category Topic")
slug = models.SlugField(max_length=100, unique=True, verbose_name="Category Address")
status = models.BooleanField(default=True, verbose_name="Do you want to show?")
position = models.IntegerField(verbose_name="position")
class Meta:
verbose_name = "Category"
verbose_name_plural = "Categories"
ordering = ['position']
def __str__(self):
return self.title
class Article(models.Model):
STATUS_CHOICES = (
('Draft', 'Draft'),
('Published', 'Published')
)
title = models.CharField(max_length=300)
slug = models.SlugField(max_length=100, unique=True)
category = models.ManyToManyField(Category, verbose_name="Category", related_name="articles")
description = models.TextField()
thumbnail = models.ImageField(upload_to="images")
publish = models.DateTimeField(default=timezone.now)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
status = models.CharField(max_length=10, choices=STATUS_CHOICES)
class Meta:
ordering = ['-publish']
def __str__(self):
return self.title
def category_published(self):
return self.category.filter(status=True)
objects = ArticleManager()
############
#Views.py
from django.shortcuts import render, get_object_or_404
from django.http import HttpResponse, JsonResponse, Http404
from .models import Article, Category
# Create your views here.
def home(request):
context = {
"articles": Article.objects.published()
}
return render(request, 'website/home.html', context)
def detail(request, slug):
context = {
"article": get_object_or_404(Article.objects.published(), slug=slug)
}
return render(request, 'website/detail.html', context)
def article(request):
context = {
"articles": Article.objects.filter(status="Published"),
"category": Category.objects.filter(status=True)
}
return render(request, 'website/article.html', context)
def category(request, slug):
cat = get_object_or_404(Category, slug=slug, status=True)
context = {
"category": cat.articles.all()
}
return render(request, 'website/category.html', context)
###########
#Category.html page
{% extends 'website/base.html' %}
{% load static %}
{% block main %}
<main id="main">
<!-- ======= Breadcrumbs ======= -->
<section id="breadcrumbs" class="breadcrumbs">
<div class="container">
<div class="d-flex justify-content-between align-items-center">
<h2>Blog</h2>
<ol>
<li><a href="home.html">Home</a></li>
<li>Blog</li>
</ol>
</div>
</div>
</section><!-- End Breadcrumbs -->
<!-- ======= Blog Section ======= -->
<section id="blog" class="blog">
<div class="container">
<div class="row">
<div class="col-lg-8 entries">
{% for article in category %}
<article class="entry" data-aos="fade-up">
<div class="entry-img">
<img src="{{ article.thumbnail.url }}" alt="" class="img-fluid">
</div>
<h2 class="entry-title">
{{ article.title }}
</h2>
<div class="entry-meta">
<ul>
<li class="d-flex align-items-center"><i class="icofont-user"></i>
<a href="detail.html">John Doe</a></li>
<li class="d-flex align-items-center"><i class="icofont-wall-clock"></i>
<a href="detail.html"><time>{{ article.publish }}</time></a></li>
<li class="d-flex align-items-center"><i class="icofont-tags"></i>
<ul class="tags">
{% for cat in article.category_published %}
<a href="{% url 'website:category' cat.slug %}">#{{ cat.title }}</a>
{% endfor %}
</ul>
</li>
<li class="d-flex align-items-center"><i class="icofont-comment"></i>
<a href="detail.html">12 Comments</a></li>
</ul>
</div>
<div class="entry-content">
{{ article.description|truncatewords:30}}
<div class="read-more">
<a href="{% url 'website:detail' article.slug %}">Read More</a>
</div>
</div>
</article><!-- End blog entry -->
{% endfor %}
<div class="blog-pagination">
<ul class="justify-content-center">
<li class="disabled"><i class="icofont-rounded-left"></i></li>
<li><a href="#">1</a></li>
<li class="active"><a href="#">2</a></li>
<li><a href="#">3</a></li>
<li><a href="#"><i class="icofont-rounded-right"></i></a></li>
</ul>
</div>
</div><!-- End blog entries list -->
<div class="col-lg-4">
<div class="sidebar" data-aos="fade-left">
<h3 class="sidebar-title">Search</h3>
<div class="sidebar-item search-form">
<form action="">
<input type="text">
<button type="submit"><i class="icofont-search"></i></button>
</form>
</div><!-- End sidebar search formn-->
{# <h3 class="sidebar-title">Categories</h3>#}
{# <div class="sidebar-item categories">#}
{# <ul>#}
{# {% for cat in category %}#}
{# <li class="active"><a href="{% url 'website:category' cat.slug %}">#{{ cat.title
}}</a></li>#}
{# {% endfor %}#}
{# </ul>#}
{##}
{# </div><!-- End sidebar categories-->#}
<h3 class="sidebar-title">Recent Posts</h3>
<div class="sidebar-item recent-posts">
<div class="post-item clearfix">
<img src="assets/img/blog-recent-posts-1.jpg" alt="">
<h4><a href="detail.html">Nihil blanditiis at in nihil autem</a></h4>
<time datetime="2020-01-01">Jan 1, 2020</time>
</div>
<div class="post-item clearfix">
<img src="assets/img/blog-recent-posts-2.jpg" alt="">
<h4><a href="detail.html">Quidem autem et impedit</a></h4>
<time datetime="2020-01-01">Jan 1, 2020</time>
</div>
<div class="post-item clearfix">
<img src="assets/img/blog-recent-posts-3.jpg" alt="">
<h4><a href="detail.html">Id quia et et ut maxime similique occaecati ut</a></h4>
<time datetime="2020-01-01">Jan 1, 2020</time>
</div>
<div class="post-item clearfix">
<img src="assets/img/blog-recent-posts-4.jpg" alt="">
<h4><a href="detail.html">Laborum corporis quo dara net para</a></h4>
<time datetime="2020-01-01">Jan 1, 2020</time>
</div>
<div class="post-item clearfix">
<img src="assets/img/blog-recent-posts-5.jpg" alt="">
<h4><a href="detail.html">Et dolores corrupti quae illo quod dolor</a></h4>
<time datetime="2020-01-01">Jan 1, 2020</time>
</div>
</div><!-- End sidebar recent posts-->
<h3 class="sidebar-title">Tags</h3>
<div class="sidebar-item tags">
<ul>
<li><a href="#">App</a></li>
<li><a href="#">IT</a></li>
<li><a href="#">Business</a></li>
<li><a href="#">Business</a></li>
<li><a href="#">Mac</a></li>
<li><a href="#">Design</a></li>
<li><a href="#">Office</a></li>
<li><a href="#">Creative</a></li>
<li><a href="#">Studio</a></li>
<li><a href="#">Smart</a></li>
<li><a href="#">Tips</a></li>
<li><a href="#">Marketing</a></li>
</ul>
</div><!-- End sidebar tags-->
</div><!-- End sidebar -->
</div><!-- End blog sidebar -->
</div>
</div>
</section><!-- End Blog Section -->
</main><!-- End #main -->
{% endblock %}