Django模型外键过滤器

时间:2017-10-08 14:13:18

标签: python django filter model

问题: 我有两个django型号:

class Driver(models.Model):
   event = models.ForeignKey('Event')
   last_event = ????
   ...
   ...

class Event(models.Model):
   date = models.IntegerField()

现在我只需要每个驱动程序PREFETCHED和CACHED

的最后一个事件
d = Driver.objects.prefetch_related('last_event???')

我如何实现它? 有没有办法限制关系,如:

last_event = models.ForeaignKey('Event', filter = ...??? )

2 个答案:

答案 0 :(得分:0)

为了避免产生循环依赖关系,您可以在Event模型中定义驱动程序的所有外键,并且由于驱动程序可能有很多事件。

class Event(models.Model):
   driver = models.ForeignKey(Driver, related_name='events')
   date = models.IntegerField()
   created_at = models.DateTimeField(auto_now_add=True)
   objects = EventManager()

然后在事件管理器中定义一个last_event属性,如下所示:

class EventManager(models.Manager):
    @property
    def last_event(self, driver):
        return self.filter(driver=driver).lastest('created_at')

然后你可以通过Event.objects.last_event(driver)

来调用它

如果要使用driver.last_event,则可以在Driver模型中定义last_event属性:

class Driver(models.Model):
   ...
   @propery
   def last_event(self):
       the_last_event = Event.objects.last_event(self)
       return the_last_event

答案 1 :(得分:0)

我已经通过添加:

来解决问题
"../src/assets/material-icons.css"

所以现在它按照我的计划行事:就像一个可缓存的属性