我寫了一個抽象基類,它將我的一些表的常用字段組合在一起。我希望能夠使用管理器以相同的方式查詢所有這些字段。的這個自定義管理器 - 抽象基類的查詢
class TemporalModel(models.Model):
objects = models.Manager()
today = TodayManager()
time = models.DateTimeField()
class Meta:
abstract = True
get_latest_by = 'time'
一個簡單的例子,如上所示,是能夠今天以查詢的條目TemporalModel的亞類(其中所有具有「時間」字段)。
我這樣寫了一個經理:
class TodayManager(models.Manager):
def get_query_set(self):
now = timezone.now()
today = datetime(now.year, now.month, now.day, tzinfo=now.tzinfo)
tomorrow = today + timedelta(days=1)
qs = models.Manager.get_query_set(self).filter(time >= today)
qs = qs.filter(time < tomorrow)
return qs
嘗試使用這種失敗與NameError(未規定的時間)。我認爲這與this question中的原因相同 - 該字段不在抽象類中,而是在子類上。
不過,我從來沒有真正的抽象類調用此。如果我有類似如下:
class SomeTemporalThing(TemporalModel):
pass # I'm a real table! :)
那麼我希望能夠調用,例如,SomeTemporalThing.today.all(),並有Django的對執行時間> = TODAY /時間<明天查找子表。
是否有可能實現這一目標,而不經理定義移動到子類(這會導致重複)?
我的custom manager documentation的讀數表明,它應該是可能的,但我難倒如何。
這是我接受你的答案和我是白癡這個事實的部分。隊友的歡呼聲 :) – sapi