Skip to main content
 首页 » 编程设计

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

2025年02月15日32cmt

我有两个模型如下:

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) 

等

这是正确的做法。