【发布时间】:2017-09-08 03:27:54
【问题描述】:
我在我的网站上使用 Django 1.9,我需要一种有效的方法来完全忽略不活跃的用户,所以我不会向他们发送任何通知、电子邮件等。
我尝试使用只返回活动模型管理器的自定义模型管理器,如下所示:
class ActiveAccountsManager(models.Manager):
use_for_related_fields = True
def get_queryset(self):
return super(ActiveAccountsManager, self).get_queryset().filter(user__is_active=True)
class Account(models.Model):
class Meta:
verbose_name = _('Account')
verbose_name_plural = _('Accounts')
objects = ActiveAccountsManager()
all_accounts = models.Manager() # Enabling the obtention of all the users, instead of only the active ones
user = models.OneToOneField(User)
type = models.IntegerField(choices=ACCOUNT_TYPES, default=-1)
而且,虽然当我直接尝试查询 Account 对象时它完全符合我的要求,但当它们通过与它有 ForeignKey 关系的对象引用时它不会。例如,如果我有一个像下面这样的 Comment 模型:
class Comment(models.Model):
author = models.ForeignKey(Account)
我希望,当我查询 Comment 对象时,也不会返回其作者是非活动用户(即 Account 模型的默认 Manager 不会返回的用户)的对象,而不是返回返回评论但表示与其相关的帐户不存在的当前行为
如果没有在 Comment 类上专门定义自定义 ModelManager,是否有任何方法可以实现这一点?因为问题是我想在很多与 Account one 相关的类中实现这一点,而且我想不出一种方法来做到这一点而不会非常重复。
如果我的问题的任何部分不够清楚,或者我是否需要提供有关我的代码的更多详细信息,请不要犹豫。非常感谢您。
【问题讨论】:
标签: python django django-models django-queryset django-managers