Object attribute validation in manager in Django
I have a manager in which I have
class MyManager(models.Manager):
TYPE_PENDING = 1
def pending():
return self.filter(type=self.TYPE_PENDING)
Now I can always get a set of pending objects.
But can I also do something to check if the object is expecting?
I can of course use if object.type == MyManager.TYPE_PENDING:
, but can I do something in the manager, so I don't need to call MyManager.TYPE_PENDING
outside of the manager, but instead create a function like
def is_pending():
return self.type == self.TYPE_PENDING
or something like that.
I could also do something like if object in Model.objects.pending():
, but doesn't it have bad performance since it loads the whole request?
Edit
If I have two managers PackageManager
and StateManager
associated with models Package
and State
, respectively.
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)
I have my choice ( TYPE_DELIVERED
etc.) defined in State
. Can I PackageManager
replace 1
it with what it should be TYPE_DELIVERED
?
I know I can write current_state__type=State.TYPE_DELIVERED
, but it calls a circular import if I have to import managers in models and models in managers.
Can I use that I can get filtering state requests for all delivered?
I mean if I can do something like
class PackageManager(models.Manager):
def delivered(self):
return self.filter(current_state__type=StateManager.model.TYPE_DELIVERED)
source to share
I think it would be more appropriate to define TYPE_PENDING
in the model itself:
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)
source to share