Django 按类别过滤
Django filter by category
我想看具体的分类 post,
我创建了类别应用程序和博客 app.i 想要在 home.html.that 中显示前 5 或 10 post 这就是我需要 4 个特定类别的原因。
但我无法从 post model.i 中过滤(类别) model.i 无法访问类别,因为我创建了另一个应用程序..
我想按类别过滤。
model.py for category
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 for blog
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"))
如果您想按特定类别名称过滤 post,这应该有效。
Django 还支持 follow relationships when filtering 的特殊 __
(双下划线)语法。所以以下也应该有效:
post_by_category = Post.objects.filter(category__category_name="aaa", published=True)
我想看具体的分类 post, 我创建了类别应用程序和博客 app.i 想要在 home.html.that 中显示前 5 或 10 post 这就是我需要 4 个特定类别的原因。 但我无法从 post model.i 中过滤(类别) model.i 无法访问类别,因为我创建了另一个应用程序..
我想按类别过滤。
model.py for category
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 for blog
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"))
如果您想按特定类别名称过滤 post,这应该有效。
Django 还支持 follow relationships when filtering 的特殊 __
(双下划线)语法。所以以下也应该有效:
post_by_category = Post.objects.filter(category__category_name="aaa", published=True)