1. ホーム
  2. django

[解決済み] Django の管理画面でデフォルトのクエリセットをオーバーライドする

2023-04-16 21:08:57

質問

私のモデルの1つは、グローバルにオブジェクトを隠すために使用される、削除されたフラグを持っています。

class NondeletedManager(models.Manager):
    """Returns only objects which haven't been deleted"""

    def get_query_set(self):
        return super(NondeletedManager, self).get_query_set().exclude(deleted=True)

class Conversation(BaseModel):
    ...
    deleted = models.BooleanField(default=False)
    objects = NondeletedManager()
    all_conversations = models.Manager() # includes deleted conversations

Django admin module が使用するデフォルトの queryset を上書きして、削除された会話を含めるにはどうすればよいですか?

どのように解決するのですか?

あなたは オーバーライド get_queryset メソッドをオーバーライドします。

class MyModelAdmin(admin.ModelAdmin):
    def get_queryset(self, request):
        qs = super(MyModelAdmin, self).get_queryset(request)
        if request.user.is_superuser:
            return qs
        return qs.filter(author=request.user)

Django<=1.5 では、このメソッドの名前は単に queryset .