149

我正在尝试根据 a 的特定字段的值过滤 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')

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

4

3 回答 3

224
Asset.objects.filter( project__name__contains="Foo" )
于 2009-12-30T18:07:54.260 回答
21

queryset-refactor自从分支登陆 pre-1.0 以来,这一直是可能的。工单 4088暴露了这个问题。这应该有效:

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

Django 多对一文档有这个和其他使用模型 API 跟随外键的例子。

于 2009-12-30T18:07:37.537 回答
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})

在我上面的应用程序中,我假设一旦学生注册,将创建一个主题 SubjectGrade 实例,其中包含注册的主题和学生本人。

Subject 和 Student User 模型是 SubjectGrade 模型的外键。

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

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

于 2018-09-28T08:50:20.697 回答