1

データベース 'db2' に保存されているモデル用のカスタム マネージャーを作成して、その必要がないようにしたいと考えていますmodel.objects.using('db2').all()。私のモデルとカスタムマネージャーのコードは

class ViewerProfileManager(models.Manager):
    def get_query_set(self):
    return super(ViewerProfileManager,self).using('db2').get_query_set() # results in recursion error

class ViewerProfile(models.Model):
    name = models.CharField(max_length=32)
    count = models.IntegerField(blank=True,null=True)

    objects = models.Manager()
    profiles = ViewerProfileManager()
-------------

>>> ViewerProfile.profiles.all() # maximum recursion depth exceeded error

私がここでやっていることと、それを機能させる方法の何が問題になっていますか?

4

2 に答える 2

2

親でメソッドを呼び出すsuper()か ( を使用)、マネージャーで属性の適切な処理を行うことができます (使用_dbするデータベースの名前を含む文字列)。QuerySetメソッドからカスタム クラスを返したい場合get_query_set:

class ViewerProfileManager(models.Manager):
    def get_query_set(self):
        qs = CustomQuerySet(self.model)
        if self._db is not None:
            qs = qs.using(self._db)
        return qs

またはこれを使用します:

class ViewerProfileManager(models.Manager):
    using="db"
    def get_query_set(self,request):
        return super(ViewerProfileManager,self).queryset(request).using(self.using)

class ViewerProfile(models.Model):
    name = models.CharField(max_length=32)
    count = models.IntegerField(blank=True,null=True)

    objects = models.Manager()
    profiles = ViewerProfileManager()

self._dbデータベースの名前の影響を受けます。

于 2013-08-08T05:51:05.250 に答える