7

これを達成するためのベストプラクティスまたは推奨される方法があるかどうか知りたいですか?

次のようなモデルがあるとします。

class Cat(models.Model):
    field1=models.CharField(...)
    field2=models.CharField(...)
    evil=models.BooleanField(...)

私が達成しようとしているのは、悪が真である Cat レコードにビューがアクセスできないようにすることです。

すべての Cat.objects.filter 呼び出しに .filter(evil=False) を本当に追加する必要がありますか、それともクラスで一度実行して邪悪な猫がどこにも現れないようにする方法はありますか?

4

1 に答える 1

10

わかりました、カスタム マネージャーはここに収まります。docsをご覧ください。Chris Pratt が言ったように、最初のマネージャーがデフォルトのマネージャーになることに注意してください。

これが正しい方向につながることを願っています。

更新(おそらく、次のようにすることができます):

from django.db import models

class EvilCategoryManager(models.Manager):
    def get_query_set(self):
        return super(EvilCategoryManager, self).get_query_set().filter(evil=False)

class Cat(models.Model):
    #.... atrributes here
    objects = models.Manager()
    no_evil_cats = EvilCategoryManager()
于 2012-07-23T18:01:51.043 に答える