1

我刚刚接触到Django Managers,我发现自己正在做这种类型的编程。我正在寻找是否有办法消除明显的重复。我相信我需要定义 useget_query_set来指代我自己?

非常清楚我的问题。我不得不重复地传递细分,以便找出要从中过滤的行。我认为有一种更简单的方法,我只是不确定它是什么。

谢谢看!!

--- 模型.py

class Subdivision(models.Model):
    objects = SubdivisionManager()

--- 管理者.py

class SubdivisionManager(models.Manager):
    """A generic manager with metros"""


    def is_metro_sample_eligible(self, subdivision_id):
        """Are we eligible for sampling taking into account the 90 day windows"""
        from .models import Subdivision
        subdivision = Subdivision.objects.get(id=subdivision_id)
        return True


    def get_available_subdivisions(self, subdivision_id):
        """Return all potential subdivisions for a builder in a metro"""
        from .models import Subdivision
        subdivision = Subdivision.objects.get(id=subdivision_id)
        return self.filter(builder_org=subdivision.builder_org,
                           metro=subdivision.metro)

    def get_available_sampling_subdivisions(self, subdivision_id):
        """Return Subdivision which are able to participate in metro sampling"""
        from .models import Subdivision
        subdivision = Subdivision.objects.get(id=subdivision_id)
        return self.filter(builder_org=subdivision.builder_org,
                           metro=subdivision.metro,
                           use_sampling = True,
                           use_metro_sampling = True)
4

1 回答 1

1

实际上,我会is_metro_sample_eligible()使用Subdivision,因为每个调用都需要访问一个实例。

class Subdivision(models.Model):
    def is_metro_sample_eligible(self):
        """Are we eligible for sampling taking into account the 90 day windows"""
        #TODO do something useful here and return true or false
        return True

然后我要么移动get_available_subdivisions()get_available_sampling_subdivisions()你的builder_org模型上

from .models import Subdivision

class BuilderOrg(models.Model):
    #whatever you have goes here
    def get_available_subdivisions(self, metro):
        """Return all potential subdivisions for a builder in a metro"""
        return Subdivision.objects.filter(builder_org=self,
                                          metro=metro)

    def get_available_sampling_subdivisions(self, metro):
        """Return Subdivision which are able to participate in metro sampling"""
        return Subdivision.objects.filter(builder_org=self,
                                          metro=metro,
                                          use_sampling = True,
                                          use_metro_sampling = True)

或将其留给经理,并将签名修改为get_available_subdivisions(self, builder_org, metro)

基本原理-我可以想象需要在get_available_subdivisions()没有实际考虑的情况下打电话Subdivision-显然,重要的信息是建筑商组织和地铁。

于 2012-02-18T05:36:40.893 回答