首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在虚拟django模型字段(property)上进行过滤?

如何在虚拟django模型字段(property)上进行过滤?
EN

Stack Overflow用户
提问于 2013-12-24 10:44:02
回答 1查看 725关注 0票数 1

我有下一个django模型,其中tracker_id是一个虚拟字段:

代码语言:javascript
运行
复制
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)

此外,我也有品位的资源,它:

代码语言:javascript
运行
复制
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', )

但!当我试图像这样通过tracker_id过滤对象时

代码语言:javascript
运行
复制
http://myhost/api/v1/failures/?tracker_id=123

我收到错误:“无法将关键字'tracker_id‘解析为字段。选择是:_tracker_id”

是否存在通过tracker_id而不是内部字段进行过滤?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-24 22:35:16

通过Meta类进行过滤只适用于实际字段。

尝试重写build_filters函数

代码语言:javascript
运行
复制
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

不要忘记在您的Meta类中删除不工作的过滤器。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20759457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档