我已經更改了GenericForeignKey()
可以引用的某些對象的默認管理器,以便這些對象可能不再出現在該默認管理器中。通過GenericForeignKey()使用非默認管理器
我有其他的管理者能夠找到這些刪除對象,但我看不出有關它們的內容類型框架。這可能嗎?
我實現「軟刪除」一些車型涉及以下管理:
from django.db import models
SDManager(models.Manager):
def get_query_set(self):
return super(SDManager, self).get_query_set().filter(is_deleted=False)
SDDeletedManager(models.Manager):
def get_query_set(self):
return super(SDDeletedManager, self).get_query_set().filter(is_deleted=True)
這使我能夠做到以下幾點:
SDModel(models.Model):
# ...
objects = SDManager() # Only non (soft) deleted objects
all_objects = models.Manager() # The default manager
deleted_objects = SDDeletedManager() # Only (soft) deleted objects
當在模型中使用GenericForeignKey()
場爲了引用定義的對象,例如SDModel
,它使用_default_manager
屬性,該屬性評估爲objects
管理器,以獲得參考。這意味着當對象被軟刪除時它會丟失引用。
這是我使用GenericForeignKey()
字段的主要原因之一。我一直在研究的解決方案是實現較低版本的內容類型框架,以便我可以定義我自己的get_object()
,它使用all_objects
管理器來訪問引用對象。
所以我的問題真的是:
是否有可能使用與現有的內容類型框架非默認的經理,以便先找到軟刪除的對象,否則我將不得不重新實現所有我從零開始需要的零件?
您可能需要了解更多細節併發布示例代碼。 – stefanw 2010-03-04 01:07:27
我已經添加了更多細節,讓您更清楚地瞭解我的困境。 – 2010-03-04 02:20:48
很抱歉,如果我遺漏了一些顯而易見的東西,但是你有沒有考慮將「對象」作爲默認models.Manager並命名SDManager?即交換對象和all_objects的定義? – 2010-03-04 05:37:01