[英]Django model foreign key filter
問題:我有兩個Django模型:
class Driver(models.Model):
event = models.ForeignKey('Event')
last_event = ????
...
...
class Event(models.Model):
date = models.IntegerField()
現在我只需要每個驅動程序的PRELASTCHED和CACHED LAST事件
d = Driver.objects.prefetch_related('last_event???')
我該如何實現? 有什么辦法可以將關系限制為:
last_event = models.ForeaignKey('Event', filter = ...??? )
為了避免產生圈依賴關系,可以在事件模型中定義驅動程序的所有外鍵,並且由於驅動程序可能具有許多事件。
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
我已經通過添加解決了一個問題:
def get_current_tour(self):
ret = None
self._my_relations.create_dict_path('current_tour')
if not self._my_relations['current_tour']:
try:
self._my_relations['current_tour'] = \
DriverTour.objects.filter(start_date__lte=int(time.time()), end_date__gte=int(time.time()), driver=self.id).order_by('-id').all()[0]
ret = self._my_relations['current_tour']
except Exception:
self._my_relations['current_tour'] = None
ret = None
else:
ret = self._my_relations['current_tour']
return ret
def set_current_tour(self, args):
self._my_relations['current_tour'] = args[0]
current_tour = property(fget=get_current_tour, fset=set_current_tour)
所以現在它的行為符合我的計划:就像可緩存的屬性
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.