我有一个经理
class MyManager(models.Manager):
TYPE_PENDING = 1
def pending():
return self.filter(type=self.TYPE_PENDING)
现在我总能得到待定对象的查询集。
但是我还可以做一些事情来检查对象是否处于挂起状态吗?
我当然可以使用 if object.type == MyManager.TYPE_PENDING:
但是我可以在管理器中做一些事情吗,所以我不必调用 MyManager.TYPE_PENDING
在管理器之外,而是创建一个像
def is_pending():
return self.type == self.TYPE_PENDING
或类似的东西。
我也可以做类似 if object in Model.objects.pending():
的事情,但它加载整个查询集后性能不会很差吗?
编辑
如果我有两个管理器 PackageManager
和 StateManager
与模型 Package
和 State
相关,resp.
class PackageManager(models.Manager):
def delivered(self):
return self.filter(current_state__type=1)
class StateManager(models.Manager):
def delivered(self):
return self.filter(type=self.model.TYPE_DELIVERED)
我在 State
中定义了我的选择(TYPE_DELIVERED
等)。我可以在 PackageManager
中将 1
替换为告诉它应该是 TYPE_DELIVERED
的东西吗?
我知道我可以编写 current_state__type=State.TYPE_DELIVERED
但如果我应该将管理器导入模型并将模型导入管理器,它会导致循环导入。
我可以利用它为所有已交付的状态查询集过滤吗?
我的意思是如果我能做类似的事情
class PackageManager(models.Manager):
def delivered(self):
return self.filter(current_state__type=StateManager.model.TYPE_DELIVERED)
最佳答案
我认为在模型本身中定义 TYPE_PENDING
会更合适:
class MyModel(models.Model):
TYPE_PENDING = 1
...
@property
def is_pending(self):
return self.type == self.TYPE_PENDING
objects = MyManager()
...
class MyManager(models.Manager):
def pending():
return self.filter(type=self.model.TYPE_PENDING)
关于python - 在 Django 的管理器中验证对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30743785/