Django фильтр по категориям
Я хочу видеть посты в определенной категории, Я создал приложение категории и приложение блога. Я хочу показывать 5 или 10 лучших записей в home.html. поэтому мне нужно 4 определенных категории. Но я не могу фильтровать (категорию) из модели поста. Я не могу получить доступ к категории, потому что я создал другое приложение...
я хочу фильтровать по категориям.
model.py для категории
class Category(models.Model):
parent = models.ForeignKey('self', related_name='children', on_delete=models.CASCADE, blank = True, null=True)
category_name = models.CharField(max_length=50,unique=True)
slug = models.SlugField(allow_unicode=True,max_length=100,unique=True)
description =models.TextField(max_length=300,blank=True)
cat_image = models.ImageField(upload_to = 'photo/categories',blank = True)
created_at = models.DateTimeField(auto_now_add=True)
model.py для блога
class Post(models.Model):
title = models.CharField(max_length=200, unique=True)
slug = models.SlugField(allow_unicode=True, unique=True, max_length=250, null=True, blank=True)
subtitle = models.CharField(max_length=255, blank=True)
heder_image = models.ImageField(null=False,blank=True,upload_to="images/")
heder_image_url = models.CharField(null=True,blank=True,max_length=200)
heder_image_Under_line = models.TextField(null=True,default="image")
# author = models.ForeignKey(Profile, on_delete=models.PROTECT)
author = models.ForeignKey(User, on_delete=models.CASCADE)
updated_on = models.DateTimeField(auto_now= True)
created_on = models.DateTimeField(auto_now_add=True)
body = RichTextField(max_length=100000)
status = models.IntegerField(choices=STATUS, default=0)
meta_description = models.TextField(max_length=300, blank=True,default='')
category = models.ForeignKey(Category,on_delete= models.CASCADE)
views.py
def home(request):
category = Category.objects.all().filter(parent=None)
post_by_category = Post.objects.filter(published=True).order_by('-created_on')#filter by category name
slider = Post.objects.filter(slider=True).order_by('-created_on')
context = {
'category':category,
'post_by_category':post_by_category,
'slider':slider,
'counter':Counter,
}
return render(request,'home.html',context)
post_by_category = Post.objects.filter(category=Category.objects.get(category_name="aaa"))
Это должно работать, если вы хотите фильтровать посты по определенному названию категории.
Django также поддерживает специальный синтаксис __
(двойное подчеркивание) для слежения за отношениями при фильтрации. Поэтому следующее также должно работать:
post_by_category = Post.objects.filter(category__category_name="aaa", published=True)