首页 > 解决方案 > django queryset 将外键对象输出到 ModelChoiceField

问题描述

class Location(models.Model):
   name = models.CharField()

class Point(models.Model):
   name = models.CharField()
   location = models.ForeignKey('Location')

我有一个位置列表:

Location A
Location B
Location C

每个点都属于一个位置:

Point 1 -> Location A
Point 2 -> Location B

我想为 forms.ModelChoiceField 提供一个查询集,以便它仅显示在数据库中具有关联点的位置(在上面的示例中,它应该只返回位置 A 和位置 B)。

在 SQL 语言中,它将是:SELECT location.* FROM location JOIN point ON location.id = punto.location_id

我花了过去两个小时阅读 Django 文档,但我找不到任何方法来做我需要的……有什么建议吗?

标签: djangodjango-forms

解决方案


您可以通过以下方式查询:

Location.objects.filter(point__isnull=False).distinct()

.distinct()调用 [Django-doc]严格来说是没有必要的,但如果没有,您.distinct()将检索每一个Location,因为它们Point在数据库中是相关的。


推荐阅读