如何在 Django ORM 中过滤它

Posted

技术标签:

【中文标题】如何在 Django ORM 中过滤它【英文标题】:How do I filter this in Django ORM 【发布时间】:2015-03-05 14:49:01 【问题描述】:

这是我的models.py

class Category(models.Model):
    name = models.CharField(max_length=200, default='')
    slug = models.SlugField(max_length=100,default='',unique=True)

    def __unicode__(self):
        return self.name


class SubCategory(models.Model):
    category = models.ForeignKey(Category)
    name = models.CharField(max_length=200, default='')
    slug = models.SlugField(max_length=100,default='',unique=True)


class TutorInfo(models.Model):
    user = models.OneToOneField(User)
    name = models.CharField(max_length=255, default='')
    category = models.ManyToManyField(Category, related_name='categories')
    about = models.TextField(default='')


class Course(models.Model):
    user = models.ForeignKey(User)
    category = models.ForeignKey(Category)
    sub_category = models.ForeignKey(SubCategory)
    course_name = models.CharField(max_length=255, default='')

现在我想过滤TutorInfo,使sub_category 匹配他们添加的Course 中的sub_category。一个Tutor 可以有多个Course。是否可以编写这样的查询?如果没有,请告诉我应该在 models.py 中做哪些更改

【问题讨论】:

请多解释一下您的数据模型。只有一个sub_category 元素与Course 关联。 考虑这种情况 /search/tutor/?sub_cat=1 我希望 TutorInfo 使 id "1" 与用户添加的课程中的 SubCategory id 匹配... 试试TutorInfo.objects.filter(user__course__sub_category__id__exact=1) 超级..完成..谢谢.. 在您的问题中提供代码通常比提供外部 url 更好。 Stack Overflow 具有良好的代码突出显示和格式设置,这使得代码随时可用,即使原始链接不再可用。我现在已经为你更新了帖子:) 【参考方案1】:

如果 1 是您感兴趣的 sub_category 的 id,请使用

TutorInfo.objects.filter(user__course__sub_category__id__exact=1)

sc 是否为 sub_category 模型实例:

TutorInfo.objects.filter(user__course__sub_category=sc)

【讨论】:

以上是关于如何在 Django ORM 中过滤它的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Django ORM 一次过滤 2 个属性

Django ORM:如何根据注释 timedelta 结果进行过滤

Django ORM 按过滤器排序

Django通过多对多ORM对象中的多个标签进行过滤

如何在 Django ORM 中映射 PostgreSQL 数组字段

Django - Django ORM 如何管理用户在数据库中上传的表