Ответ 1
Asset.objects.filter( project__name__contains="Foo" )
Я пытаюсь отфильтровать таблицу в 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')
Мне интересно, есть ли способ указать этот вид фильтрации в основном запросе?
Asset.objects.filter( project__name__contains="Foo" )
Это стало возможным с тех пор, как ветвь queryset-refactor
приземлилась до версии 1.0. Билет 4088 выявил проблему. Это должно работать:
Asset.objects.filter(
desc__contains=filter,
project__name__contains="Foo").order_by("desc")
В документации Django Many-to-one есть этот и другие примеры использования внешних ключей с использованием API модели.
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_user, проверив все экземпляры subjectgrade, которые имеют атрибут "student" в качестве текущего student_user
PS. Заранее извиняюсь, если вы все еще не можете понять из-за моего объяснения. Это лучшее объяснение, которое я могу предоставить. огромное спасибо