Django 查询在没有主键或外键的情况下连接来自两个模型的数据
Django query to join data from two models without primary or foreign key
我正在学习 Django,到目前为止还不错,但是我被 get_query(self)
函数卡住了。
我在 django 中有两个模型 tables:
class Airport(models.Model):
ID = models.AutoField()
Name = models.CharField()
City = models.CharField()
ICAO = models.CharField()
class Airport_Frequency(models.Model):
ICAO = models.CharField())
ATC_Type = models.CharField()
Frequency_MHz = models.DecimalField()
现在我想创建一个列表视图,但我想加入 table 字段 Airport.name
和 Airport_Frequency.ICAO
以显示在频率列表中 - SQL 语句:
SELECT DISTINCT a.ICAO, b.ICAO, b.Name FROM airport as b, airport_frequency as a WHERE a.ICAO = b.ICAO
查看:
class Airport_FrequencyListView(ListView):
model = Airport_Frequency
如何在上面的Airport_FrequencyListViewview
中引用另一个模型?
class Airport(models.Model):
ID = models.AutoField()
Name = models.CharField()
City = models.CharField()
ICAO = models.CharField()
class Airport_Frequency(models.Model):
airport = models.ForeignKey(Airport, null=True)
ICAO = models.CharField())
ATC_Type = models.CharField()
Frequency_MHz = models.DecimalField()
然后访问访问对方:
airport.airport_frequency
airport_frequency.airport
Django 不能使用不属于模型的连接。在您的情况下,一个好的主键可以是 ICAO(机场的唯一四字母标识符 - 全球唯一)。大型机场需要的频道类型较多,频率不同,因此是一对多的关系。
class Airport(models.Model):
ICAO = models.CharField(max_length=4, primary_key=True)
Name = models.CharField(...)
City = models.CharField(...)
class Airport_Frequency(models.Model):
airport = models.ForeignKey(Airport) # Airport_id is the ICAO of the airport
ATC_Type = models.CharField(...)
Frequency_MHz = models.DecimalField(...)
views.py
class Airport_FrequencyListView(ListView):
queryset = Airport_Frequency.objects.select_related('airport')
...
模板
{% for item in object_list %}
{{ item.airport.ICAO }},{{ item.airport.Name }},{{ item.Frequency_MHz }}<br>
{% end for %}
我正在学习 Django,到目前为止还不错,但是我被 get_query(self)
函数卡住了。
我在 django 中有两个模型 tables:
class Airport(models.Model):
ID = models.AutoField()
Name = models.CharField()
City = models.CharField()
ICAO = models.CharField()
class Airport_Frequency(models.Model):
ICAO = models.CharField())
ATC_Type = models.CharField()
Frequency_MHz = models.DecimalField()
现在我想创建一个列表视图,但我想加入 table 字段 Airport.name
和 Airport_Frequency.ICAO
以显示在频率列表中 - SQL 语句:
SELECT DISTINCT a.ICAO, b.ICAO, b.Name FROM airport as b, airport_frequency as a WHERE a.ICAO = b.ICAO
查看:
class Airport_FrequencyListView(ListView):
model = Airport_Frequency
如何在上面的Airport_FrequencyListViewview
中引用另一个模型?
class Airport(models.Model):
ID = models.AutoField()
Name = models.CharField()
City = models.CharField()
ICAO = models.CharField()
class Airport_Frequency(models.Model):
airport = models.ForeignKey(Airport, null=True)
ICAO = models.CharField())
ATC_Type = models.CharField()
Frequency_MHz = models.DecimalField()
然后访问访问对方:
airport.airport_frequency
airport_frequency.airport
Django 不能使用不属于模型的连接。在您的情况下,一个好的主键可以是 ICAO(机场的唯一四字母标识符 - 全球唯一)。大型机场需要的频道类型较多,频率不同,因此是一对多的关系。
class Airport(models.Model):
ICAO = models.CharField(max_length=4, primary_key=True)
Name = models.CharField(...)
City = models.CharField(...)
class Airport_Frequency(models.Model):
airport = models.ForeignKey(Airport) # Airport_id is the ICAO of the airport
ATC_Type = models.CharField(...)
Frequency_MHz = models.DecimalField(...)
views.py
class Airport_FrequencyListView(ListView):
queryset = Airport_Frequency.objects.select_related('airport')
...
模板
{% for item in object_list %}
{{ item.airport.ICAO }},{{ item.airport.Name }},{{ item.Frequency_MHz }}<br>
{% end for %}