Django-过滤外键属性


105

我正在尝试根据的特定字段的值过滤Django中的表格ForeignKey

例如,我有两个模型:

class Asset(models.Model):
    name = models.TextField(max_length=150)
    project = models.ForeignKey('Project')

class Project(models.Model):
    name = models.TextField(max_length=150)

我想根据相关项目的名称过滤资产列表。

目前,我正在执行两个查询:

project_list = Project.objects.filter(name__contains="Foo")
asset_list = Asset.objects.filter(desc__contains=filter,
                                  project__in=project_list).order_by('desc')

我想知道是否有一种方法可以在主查询中指定这种过滤?

Answers:



17

自该queryset-refactor分支机构在1.0之前发行以来,这已经成为可能。 机票4088暴露了问题。这应该工作:

Asset.objects.filter(
    desc__contains=filter,
    project__name__contains="Foo").order_by("desc")

Django的多到一个文档有这一点,并使用Model API以下外键的其他例子。


1
这是否会两次命中数据库,我是否应该使用select_related()使它更优化?
弗雷泽·格雷厄姆

5
您可以添加.query.as_sql()来查看将实际执行的sql。
fastmultiplication

django文档的链接已完全过时,并
停留

0
student_user = User.objects.get(id=user_id)
available_subjects = Subject.objects.exclude(subject_grade__student__user=student_user) # My ans
enrolled_subjects = SubjectGrade.objects.filter(student__user=student_user)
context.update({'available_subjects': available_subjects, 'student_user': student_user, 
                'request':request, 'enrolled_subjects': enrolled_subjects})

在上面的应用程序中,我假设一旦一个学生注册,就会创建一个SubjectSubject实例实例,其中包含该注册的学科和学生本人。

主题和学生用户模型是SubjectGrade模型的外键。

在“ available_subjects”中,我通过检查所有具有“ student”属性的科目实例实例作为当前student_user,从而排除了当前student_user已经注册的所有科目

PS。如果由于我的解释您仍然无法理解,请提前致歉。这是我能提供的最好的解释。非常感谢


我认为最好在代码块中编辑并添加一些文本,解释或注释以将其置于上下文中。
伊丽莎·塞努

我提供一个解释。感谢@ElishaSenoo
Kinowe
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.