Django tastypie过滤器布尔字段

时间:2014-02-15 15:45:18

标签: django boolean filtering tastypie

我在models.py中有课:

class Companies(models.Model):
    id = models.AutoField(unique=True, primary_key=True, null=False, blank=False)
    is_active = models.BooleanField(default=1, editable=False)

在HTML模板中有这个radiogroup:

<fieldset>
   <legend>Status</legend>
    <input type="radio" name="is_active" value="">All</label>
    <input type="radio" name="is_active" value="True" checked="1">Active</label>
    <input type="radio" name="is_active" value="False">Not Active</label>
   </fieldset>

使用jquery我想序列化()radiogroup并发送到tastypie API以从模型中获取过滤数据:

来自查询的网址将如下所示:

http://localhost:8000/api/view/company/list/?is_active=

结果将仅显示is_active字段

False 值的行

如果我使用?is_active = 1 结果将仅为真

如何从表中获取 True和False 行?

我可以在输入中更改“name”attr,但所有输入中的名称必须相同才能保持分组。

1 个答案:

答案 0 :(得分:1)

如果您在Django端传递?is_active=,请求将在POST字典中包含'is_active':

>>> 'is_active' in request.POST`
True

问题是内容是字符串,这里是空的:

>>> request.POST['is_active']
'' # Or None I am not quite sure.

根据Python语义:

>>> bool(None)
False
>>> bool(False)
False
>>> bool(0)
False
>>> bool('')
False

所有否定值均为:[](){}set()0''NoneFalse

如果此密钥为空,或者不调用该值为空的API,则必须覆盖build_filters以删除此密钥。

def build_filters(self, filters=None):
    if filters is None:
        filters = {}

    if "is_active" in filters and filters["is_active"] == '': # or == None you have to check
        del filters['is_active']

    return super(MyResource, self).build_filters(filters)