我正在尝试根据ForeignKey
的特定字段的值过滤Django中的表。
例如,我有两个模型:
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')
我想知道是否有办法在主查询中指定这种过滤?
答案 0 :(得分:115)
Asset.objects.filter( project__name__contains="Foo" )
答案 1 :(得分:13)
这是可能的,因为queryset-refactor
分支在1.0之前登陆。 Ticket 4088暴露了这个问题。这应该有效:
Asset.objects.filter(
desc__contains=filter,
project__name__contains="Foo").order_by("desc")
Django Many-to-one documentation有使用Model API的以下外键的这个和其他示例。
答案 2 :(得分: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实例,其中包含已注册的学科和学生本人。
主题和学生用户模型是SubjectGrade模型的外键。
在“ available_subjects”中,我通过检查所有具有“ student”属性的科目成绩实例作为当前student_user,排除了当前student_user已经注册的所有科目
PS。如果由于我的解释您仍然无法理解,请提前致歉。这是我能提供的最好的解释。非常感谢
答案 3 :(得分:0)
Asset.objects.filter(project__name="FOO")