考虑以下模型:
class Artist(GalleryMixin, models.Model):
name = models.CharField(max_length=200)
class Exhibition(GalleryMixin, models.Model):
name = models.CharField(max_length=200, verbose_name=_(u'title'))
artists = models.ManyToManyField('Artist')
现在,我添加了一个publish_on
DateTimeField
并且我不想在网站上看到任何具有publish_date
优越性的对象datetime.datetime.now()
,所以我创建了一个管理器(使用文档),它看起来像这样:
class PublicObjectManager(models.Manager):
use_for_related_fields = True
def get_query_set(self):
qs = super(PublicObjectManager, self).get_query_set()
qs = qs.filter(publish_on__lte=datetime.datetime.now())
return qs
class Artist(GalleryMixin, models.Model):
name = models.CharField(max_length=200)
publish_on = models.DateTimeField(null=True, blank=True)
public_objects = PublicObjectManager()
objects = models.Manager()
class Exhibition(GalleryMixin, models.Model):
name = models.CharField(max_length=200, verbose_name=_(u'title'))
artists = models.ManyToManyField('Artist')
publish_on = models.DateTimeField(null=True, blank=True)
public_objects = PublicObjectManager()
objects = models.Manager()
这很好用:未发布的对象永远不会出现在网站上......但是管理员无法看到未发布的对象!所以我当然可以覆盖管理查询集,但是很难覆盖关系查询集,这意味着管理员不能使用Select
字段来创建与未发布对象的关系。
IE。管理员将无法在 Exhibition.artists 中选择未发表的艺术家。
你对此有何看法?