I have the next django model where tracker_id is a virtual field:
class Failures(models.Model):
_tracker_id = models.CharField('Tracker ID', max_length=50)
def __set_tracker_id(self, value):
self._tracker_id = value
def __get_tracker_id(self):
issue = self.do_something(self._tracker_id)
return issue
tracker_id = property(__get_tracker_id, __set_tracker_id)
Also I have tastypie resource on it:
class FailuresResource(BasicResource):
tracker_id = fields.CharField(attribute='tracker_id')
class Meta:
queryset = Failures.objects.all()
allowed_methods = ['get', 'post', 'put']
filtering = {
'tracker_id': ALL,
}
excludes = ('_tracker_id', )
BUT! When I try to filter objects by tracker_id like this way
http://myhost/api/v1/failures/?tracker_id=123
I am getting error: "Cannot resolve keyword 'tracker_id' into field. Choices are: _tracker_id"
Is there anyway to make filtering by tracker_id instead internal field???
Thank you!
Filtering via Meta
class is only available for real field.
Try to override build_filters
function
def build_filters(self, filters=None):
if filters is None:
filters = {}
orm_filters = super(FailuresResource, self).build_filters(filters)
if 'tracker_id' in filters:
# do your trick here
orm_filters['_tracker_id'] = filters['tracker_id']
return orm_filters
Don't forget to remove not-working filterings in your Meta
class.