【问题标题】:Django - Filtering foreign keys using related propertiesDjango - 使用相关属性过滤外键
【发布时间】:2020-07-09 22:37:01
【问题描述】:

我正在尝试根据所选类别过滤 django 中的表。类别字段相当于名称。

我无法过滤所有链接到该特定类别 ID 的博文。

我目前使用这个: category_posts = BlogPost.objects.filter(category=cats).order_by('-published') 我可以在没有任何外键的情况下使用它。我将字符串变量传递到路径中

我怎样才能提高效率并使用与表相关的外键.. 像这样的东西: category_posts = Blogpost.objects.filter(category__category__contains=cat)

我不知道我是不是把事情复杂化了,只是困惑

以下是可用的 2 个表格:

name='Category',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('category', models.CharField(max_length=200)),
                ('summary', models.CharField(max_length=200)),
                ('slug', models.CharField(default=1, max_length=200)),
            ],
name='Blogpost',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('title', models.CharField(max_length=200)),
                ('content', models.TextField()),
                ('published', models.DateTimeField(default=datetime.datetime(2020, 7, 8, 20, 49, 14, 897634), verbose_name='date published')),
                ('slug', models.CharField(max_length=200)),
                ('category', models.ForeignKey(default=1, on_delete=django.db.models.deletion.SET_DEFAULT, to='blogposts.Category', verbose_name='Category')),
            ],

【问题讨论】:

    标签: django django-models django-rest-framework


    【解决方案1】:

    如果cat 是一个字符串,您的示例将有效,并返回所有指向名称中包含 cat 的任何类别的博文。

    category_posts = Blogpost.objects.filter(category__category__contains="cat")
    

    如果要过滤特定类别,例如

    cat = Category.objects.get(category="cat")
    

    那么您可以使用:

    BlogPost.objects.filter(category=cat)
    

    在设计方面,将存储类别名称的 char 字段简单地称为“名称”可能更清楚。然后第一个查询看起来像BlogPost.objects.filter(category__name__contains="cat"),第二个查询看起来像cat = Category.objects.get(name="cat")

    【讨论】:

      猜你喜欢
      • 2021-09-04
      • 2010-12-31
      • 2017-02-04
      • 1970-01-01
      • 2022-09-26
      • 2014-09-15
      • 2021-09-25
      • 2020-12-21
      • 2011-01-23
      相关资源
      最近更新 更多