1

私はDjangoManagersを手に入れているところですが、このタイプのプログラミングをしていることに気づきました。明らかな繰り返しを取り除く方法があるかどうかを調べています。get_query_set自分自身を参照するために使用を定義する必要があると思いますか?

私の質問を非常に明確にすること。フィルタリングの対象となる行を把握するために、サブディビジョンを繰り返し渡す必要があります。それが何であるかわからないもっと簡単な方法があると思います。

見てくれてありがとう!

--- models.py

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

--- manager.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 に答える