首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django经理或更好的计划

Django经理或更好的计划
EN

Stack Overflow用户
提问于 2012-02-18 12:29:10
回答 1查看 123关注 0票数 1

我刚刚接触到Django Managers,我发现自己在做这种类型的编程。我想看看有没有办法去掉那些明显的重复。我认为我需要定义使用get_query_set来指代我自己?

在我的问题上说得很清楚。为了找出要过滤的行,我必须反复传入细分。我想有一种更简单的方法,我只是不确定它是什么。

感谢您的关注!

- models.py

代码语言:javascript
复制
class Subdivision(models.Model):
    objects = SubdivisionManager()

- managers.py

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-18 13:36:41

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

代码语言:javascript
复制
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模型上

代码语言:javascript
复制
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 -显然,重要的信息是构建者组织和metro。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9338553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档