首页 > 解决方案 > 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})

标签: pythondjangocategories

解决方案


您可以过滤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')

推荐阅读