python - 包括其他字段作为外键的选择,Django

标签 python django django-models foreign-keys

我有两个模型如下:

class FlightSchedule(models.Model):
    tail_number = models.ForeignKey(TailNumber, null=False, blank=False)
    flight_number = models.CharField(max_length=30, null=False, blank=False)
    flight_group_code = models.ForeignKey(FlightGroup, null=False, blank=False)
    origin_port_code = models.ForeignKey(Port, null=False, related_name="Origin", blank=False)
    destination_port_code = models.ForeignKey(Port, null=False, related_name="Destination", blank=False)
    flight_departure_time = models.TimeField()
    start_date = models.DateField()
    end_date = models.DateField()

    def __unicode__(self):
        return u'%s' % self.flight_number

    class Meta:
        verbose_name_plural = "flights Schedule"


class PosFlightSchedule(models.Model):
    tail_number = models.ForeignKey(TailNumber, null=False, blank=False)
    pos_flight_number = models.ForeignKey(FlightSchedule, max_length=30, null=False, blank=False,
                                      related_name='pos_flight_number')
    pos_flight_departure_time = models.ForeignKey(FlightSchedule, max_length=30,
                                              related_name='pos_flight_departure_time')
    pos_route_id = models.ForeignKey(FlightScheduleDetail, null=False, blank=False, related_name='pos_route_id')
    pos_flight_date = models.ForeignKey(FlightScheduleDetail, null=False, blank=False, related_name='pos_flight_date')
    pax_count = models.IntegerField(null=True)

    def __unicode__(self):
        return u'%s' % self.pos_flight_number

    class Meta:
        verbose_name_plural = "Flights Schedule"

对于 pos_flight_departure_time ,我需要从 FlightSchedule 类的 flight_departure_time 中进行选择。但是我在下拉列表中得到了 flight_number 值。我必须更改什么才能获得 flight_departure_time 值?这些类来自单个 django 项目中的不同应用程序。所以他们有两个管理文件。

最佳答案

不,你实际上并不需要它。您的第二个模型中只需要一个外键到 FlightScheduleDetail 并且您只需要一个外键到 FlightSchedule

class PosFlightSchedule(models.Model):
    tail_number = models.ForeignKey(TailNumber, null=False, blank=False)
    flight = models.ForeignKey(FlightSchedule, null=False, blank=False,related_name='pos_flight_number')
                                              related_name='pos_flight_departure_time')
    pos_route_id = models.ForeignKey(FlightScheduleDetail, null=False, blank=False, related_name='pos_route_id')
            pax_count = models.IntegerField(null=True)

    def __unicode__(self):
        return u'%s' % self.pos_flight_number

    class Meta:
        verbose_name_plural = "Flights Schedule"

然后在第一个模型中声明的所有字段自动可用于 PosFlightSchedule

例如你可以这样做

p = PosFlightSchedule.objects.all()[0]
print (p.flight.flight_number)
print (p.flight.pos_flight_departure_time)

这是正确的做法。

关于python - 包括其他字段作为外键的选择,Django,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43906504/

相关文章:

python - 尝试使用 Python 子进程进行 grep,包括引用无法找到结果

python - BeautifulSoup 和转换 HTML 实体的奇怪行为

python - Django 语言更改被忽略,保持默认

django - 使用外键在 Django 中计数

python - Django:在 models.py 中出错并迁移,尝试修复错误,但 django 在 models.py 中没有看到任何更改

python - 不同用户类型的django模型设计

python - 升级后 pip 不起作用

python - 从另一个 python 文件导入对象作为列表

django - 实例化 Django 模型会引发 TypeError : isinstance() arg 2 must be a class, 类型,或类和类型的元组

python - Python 中的 OpenCV PCA 计算