7
我想默認情況下只返回「已發佈」實例(已發佈= True)。是否有可能重寫.objects,以便MyModel.objects.all()實際返回MyModel.objects.filter(published = True)?是否可以重寫django模型上的.objects?
這是合理的?如何在罕見的情況下獲得未發表的作品?
我想默認情況下只返回「已發佈」實例(已發佈= True)。是否有可能重寫.objects,以便MyModel.objects.all()實際返回MyModel.objects.filter(published = True)?是否可以重寫django模型上的.objects?
這是合理的?如何在罕見的情況下獲得未發表的作品?
您可以通過編寫自定義Manager來完成此操作 - 只需覆蓋get_queryset
方法並將objects
設置爲Manager實例即可。例如:
class MyModelManager(models.Manager):
def get_queryset(self):
return super(MyModelManager, self).get_queryset().filter(published=True)
class MyModel(models.Model):
# fields
# ...
objects = MyModelManager()
見docs瞭解詳情。這是明智的,如果這將是你平常的默認情況。要取消發佈,請創建另一位經理,您可以使用MyModel.unpublished_objects
之類的東西進行訪問。再次,文檔中有這類事情的例子。
我的救命恩人!謝謝! – 2016-12-04 23:44:11