django--關于Managers
來源:程序員人生 發布時間:2015-01-24 09:08:21 閱讀次數:3009次
Default managers
If you use custom Manager objects, take note that the first Manager Django encounters (in the order in which they’re defined in the model) has a special status. Django interprets the first Manager defined in a class as the “default” Manager, and several
parts of Django (including dumpdata) will use that Manager exclusively for that model. As a result, it’s a good idea to be careful in your choice of default manager in order to avoid a situation where overriding get_queryset() results in an inability to retrieve
objects you’d like to work with.
開始寫了兩個判斷是不是私密的manager,然后發現admin里面的顯示變成了只能顯示私密的File:
class PrivateFileManager(models.Manager):
def get_queryset(self):
return super(PrivateFileManager, self).get_queryset().filter(public=True)
class PublicFileManager(models.Manager):
def get_queryset(self):
return super(PublicFileManager, self).get_queryset().fileter(public=False)
class File(models.Model):
file = models.FileField(upload_to='medias')
public = models.BooleanField(default=True)# has default
project = models.ForeignKey(Project, related_name="projects")
tag = models.ManyToManyField(Tag, related_name="tags")
uploader = models.ForeignKey(User, related_name="users")
group = models.ManyToManyField(Group, related_name="groups")
temp_delect = models.BooleanField(default=False)# has default
desc = models.TextField(blank=True, null=True)
upload_date = models.DateTimeField(auto_now_add=True)
change_date = models.DateTimeField(auto_now=True)
# Managers blow:
privateFiles = PrivateFileManager()
publicFiles = PublicFileManager()
def __unicode__(self):
return self.file.name
class Meta:
permissions = (
("can_edit_file", "能編輯文件"),
("can_list_file", "能看文件列表"),
("can_delete_file", "能刪除文件"),
("can_download_file", "能下載文件"),
)
然后再仔細看了1下文檔,發現了文章開頭的那段話,大概意思就是定義的第1個manager將會作為默許manager....我果斷加了1個ALL,現在可以正確顯示了,代碼以下:
class AllFileManager(models.Manager):
def get_queryset(self):
return super(AllFileManager, self).get_queryset().all()
class PrivateFileManager(models.Manager):
def get_queryset(self):
return super(PrivateFileManager, self).get_queryset().filter(public=True)
class PublicFileManager(models.Manager):
def get_queryset(self):
return super(PublicFileManager, self).get_queryset().fileter(public=False)
class File(models.Model):
file = models.FileField(upload_to='medias')
public = models.BooleanField(default=True)# has default
project = models.ForeignKey(Project, related_name="projects")
tag = models.ManyToManyField(Tag, related_name="tags")
uploader = models.ForeignKey(User, related_name="users")
group = models.ManyToManyField(Group, related_name="groups")
temp_delect = models.BooleanField(default=False)# has default
desc = models.TextField(blank=True, null=True)
upload_date = models.DateTimeField(auto_now_add=True)
change_date = models.DateTimeField(auto_now=True)
# Managers blow:
allFiles = AllFileManager() # <-------------------------------------------------------------
privateFiles = PrivateFileManager()
publicFiles = PublicFileManager()
def __unicode__(self):
return self.file.name
class Meta:
permissions = (
("can_edit_file", "能編輯文件"),
("can_list_file", "能看文件列表"),
("can_delete_file", "能刪除文件"),
("can_download_file", "能下載文件"),
)
That's all.
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈