【问题标题】:django how to use filter for ForeignKeydjango如何为ForeignKey使用过滤器
【发布时间】:2020-12-11 17:31:52
【问题描述】:

我无法按类别过滤。

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, 'post/list.html', {'post':post, 'category':category})

【问题讨论】:

标签: python django categories


【解决方案1】:

您可以过滤Category 对象:

posts = Post.objects.filter(<b>category=<i>category_object</i></b>)

或者如果您没有Category 对象,请使用双下划线__ 过滤类别名称:

posts = Post.objects.filter(<b>category__name=<i>category_name</i></b>)

因此您可以通过以下方式获取与fruits 相关的Post 对象:

posts = Post.objects.filter(<b>category__name='fruits'</b>)

【讨论】:

    【解决方案2】:

    posts = Post.objects.filter(category = Category.objects.get('name' = Whatever_you_are_searching_for))

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-12
      • 1970-01-01
      • 1970-01-01
      • 2017-07-26
      • 2021-05-13
      • 1970-01-01
      • 2020-07-04
      相关资源
      最近更新 更多