Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 自定义Django模型管理器在尝试使用时出错_Python_Django_Django Models_Django Managers - Fatal编程技术网

Python 自定义Django模型管理器在尝试使用时出错

Python 自定义Django模型管理器在尝试使用时出错,python,django,django-models,django-managers,Python,Django,Django Models,Django Managers,我正在尝试编写一个简单的模型管理器,它将对特定字段进行过滤 我有一个模型,看起来像这样: """Model definition for Period.""" year = models.ForeignKey(Year, on_delete=models.PROTECT) name = models.CharField(max_length=50) active = models.BooleanField(default=False) objects =

我正在尝试编写一个简单的模型管理器,它将对特定字段进行过滤

我有一个模型,看起来像这样:

    """Model definition for Period."""
    year = models.ForeignKey(Year, on_delete=models.PROTECT)
    name = models.CharField(max_length=50)
    active = models.BooleanField(default=False)

    objects = models.Manager()
    active_year_periods = PeriodManager().active_year_periods()
class PeriodManager(models.Manager):
    """
    The manager for Period objects
    """

    def active_year_periods(self):
        """
        Gets the Period objects for the active year

        Returns:
            Period<Queryset> -- Periods for an active year
        """
        return super().get_queryset().filter(year__active=True)
我的周期管理器如下所示:

    """Model definition for Period."""
    year = models.ForeignKey(Year, on_delete=models.PROTECT)
    name = models.CharField(max_length=50)
    active = models.BooleanField(default=False)

    objects = models.Manager()
    active_year_periods = PeriodManager().active_year_periods()
class PeriodManager(models.Manager):
    """
    The manager for Period objects
    """

    def active_year_periods(self):
        """
        Gets the Period objects for the active year

        Returns:
            Period<Queryset> -- Periods for an active year
        """
        return super().get_queryset().filter(year__active=True)
你知道我为什么会遇到这个问题吗?我这样做完全错了吗

我正在尝试使用自定义管理器方法,以便最终可以在需要时传入用于附加筛选的参数。

您需要将自定义管理器的活动年期指定给管理器类,而不是方法:

models.py:


我不敢相信我错过了那件显而易见的事。啊!旁注:是否有命名经理的“最佳实践”?只调用自定义管理器“managers”有什么问题吗?这样您就可以使用like Object.managers.some_函数,并且您可以清楚地看到发生了什么?这方面没有官方惯例,但我通常会在名称后面添加一个_objects后缀,比如foo_objects,以更清楚地表明它是一个管理器。但是,我不推荐像管理器这样的通用术语,因为它们可能会导致与django内容的冲突。如果您计划添加此管理器只是为了过滤某些对象,那么您可能会发现另一件有用的事情是覆盖初始queryset检查,这样您就不需要在管理器之后再次调用active_year_periods方法。
objects = models.Manager()
active_year_periods = PeriodManager()