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)
Вернуться на верх