Django Tables2 显示不正确的真值

Django Tables2 displays incorrect truth values

我在使用 Django 1.7 和 Django-Tables2 (0.15.0) 时遇到了一个非常令人沮丧的问题。

我的模特:

class Xuser(TimeStampedModel):
    number = models.CharField(max_length=6, primary_key=True)
    moniker = models.CharField(max_length=32)
    first_name = models.CharField(max_length=32)
    last_name = models.CharField(max_length=32)
    full_name = models.CharField(max_length=128)
    department = models.CharField(max_length=32)
    citizenship = models.CharField(max_length=32)
    location = models.CharField(max_length=32)
    employee_type = models.CharField(max_length=32)
    title = models.CharField(max_length=128, blank=True)
    mail = models.EmailField(max_length=32)
    open_account_authorized = models.BooleanField(choices=YES_NO, default=None)
    open_account_enabled = models.BooleanField(choices=YES_NO, default=None)  
    root_authorized = models.BooleanField(choices=YES_NO, default=None)  

来自forms.py:

class AdminXuserTable(tables.Table):
    number = tables.LinkColumn('accountadmindetail', args=[tables.A('number')])

    class Meta:
        model = Xuser
        attrs = {"class": "adminsearchresults"}
        fields = ('number', 'first_name', 'last_name', 'open_account_authorized', 'open_account_enabled',
              'root_authorized', )

来自views.py:

def accountadmin(request):
    if request.method == "POST":
        try:
            searchtype = request.POST.get('search')
            value = request.POST.get('value')

            xusers = Xuser.objects.all()
            if searchtype == 'number':
                results = xusers.filter(number__startswith=value)
            elif searchtype == 'group':
                results = xusers.filter(department__contains=value)
            elif searchtype == 'first':
                results = xusers.filter(first_name__contains=value)
            elif searchtype == 'last':
                results = xusers.filter(last_name__contains=value)
            elif searchtype == 'moniker':
                results = xusers.filter(moniker__contains=value)
            else:
                messages.error(request, ERRMSG_NO_POST)
                results = None

            if results:
                resultstable = AdminXuserTable(results)
            else:
                resultstable = None

        except IndexError:
            messages.error(request, ERRMSG_NO_POST)
            return HttpResponseRedirect(reverse('error'))
    else:
        resultstable = None

    return render_to_response('includes/accountadmin.html',
                              {"resultstable": resultstable, },
                              context_instance=RequestContext(request))

我遇到的问题是,无论搜索 returns 1 个结果还是 table 中的一打结果,所有布尔值都显示为 True(复选标记),无论它们在数据库中是什么。

我不知道它是否相关,但我的项目从 Django 1.6 开始,我在游戏后期将它迁移到 Django 1.7。除此以外,一切正常。布尔值在我的数据库中存储为 't' 或 'f'。有什么想法吗?

好吧,我终于明白了。问题实际上出在我的 choices 选项上。这就是我将 choices 定义为:

YES_NO = (
    (True, 'Yes'),
    (False, 'No'),
)

我开始破解 django-tables2/columns/booleancolumn.py 代码。当我将 render 函数设置为 return 给它的值时,我意识到该值是 "Yes" 或 "No"。由于代码使用 bool() 转换这些值,因此它总是 returning True.

如果不进行一些自定义,我认为 Django-Tables2 无法在 BooleanField.

上处理 "choices"