如何在 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:如何根据注释 timedelta 结果进行过滤