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"
我在使用 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
.