python - django如何为ForeignKey使用过滤器
问题描述
我无法按类别过滤。
category = ['fruits', 'vegetable']
post = ['apple', 'banana', 'onion']
蟒蛇 3 / Django 3
项目/应用程序/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 外壳
>>> 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, 'post/list.html', {'post':post, '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')
推荐阅读
- stored-procedures - 使用 SNOWPIPE 时如何清除 Stage 或从 Stage 中删除文件?
- sql - SQL 用最后观察到的值填充 nan
- php - OpenSUSE php-fpm.conf 权限被拒绝
- python - Scipy最小化错误:“标量变量的索引无效”
- javascript - 如何根据禁用/启用按钮分配新变量?
- python - 已创建 k8s 卷快照,但它在 python k8s 客户端中返回 409 错误消息
- swift - 自定义标签栏图标的大小不正确?
- python - 使用 matplotlib 进行 3D 绘图
- python - 将复杂的 StructType 转换为 MapType
- python - 如何使用类似方法通过用户输入(包含参数/值)调用函数?