问题描述
我无法按类别进行过滤。
category = ['fruits','vegetable']
post = ['apple','banana','onion']
python 3 / django 3
project / app / models.py
from django.db import models
# Create your models here.
class Category(models.Model):
name = models.CharField(max_length=100)
class Post(models.Model):
title = models.CharField(max_length=100)
category = models.ForeignKey(Category,on_delete=models.PROTECT)
类别
category1 name=fruits
category2 name=vegetable
发布
post1 title=apple category=fruits
post2 title=banana category=fruits
post3 title=onion category=vegetable
python manage.py shell
>>> from post.models import *
>>> category = Category.objects.all()
>>> print(category)
<QuerySet [<Category: vegetable>,<Category: fruits>]>
>>> post = Post.objects.all()
>>> print(post)
<QuerySet [<Post: apple>,<Post: banana>,<Post: onion>]>
views.py工作!!!
def category(request,pk):
category = Category.objects.all()
post = Post.objects.filter(category__name='vegetable')
category_key = Category.objects.get(name=pk)
return render(request,'post/list.html',{'post':post,'category':category})
views.py不起作用:(
def category(request,category_name,pk):
category = Category.objects.all()
post = Post.objects.filter(category__name=category_name)
category_key = Category.objects.get(name=pk)
return render(request,'category':category})
解决方法
您可以过滤Category
对象:
posts = Post.objects.filter(category=category_object)
或者如果您没有Category
对象,请使用双下划线__
来过滤类别名称:
posts = Post.objects.filter(category__name=category_name)
因此,您可以使用以下方法获取与Post
相关的fruits
对象:
posts = Post.objects.filter(category__name='fruits')
,
posts = Post.objects.filter(category = Category.objects.get('name'= Whatever_you_are_searching_for ))