Django Tables2 отображает неверные значения истинности

У меня довольно неприятная проблема с 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)  

Из форм.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', )

Из представлений.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))

Проблема, с которой я сталкиваюсь, заключается в том, что независимо от того, возвращает ли поиск 1 результат или дюжину в таблице, все логические значения отображаются как True (галочка), независимо от того, что они находятся в базе данных.

Я не знаю, актуально ли это, но мой проект начинался как Django 1.6, и я довольно поздно перенес его на Django 1.7. Все работает нормально, кроме этого. Логические значения хранятся в моей базе данных как «t» или «f». Любые идеи?


person Chris C    schedule 21.01.2015    source источник
comment
Что вы хотите отобразить для логического поля?   -  person ruddra    schedule 22.01.2015
comment
Когда все это работало, столбцы со значением True отображали ✓, а столбцы со значением False отображали ✗. Недавно произошло что-то, из-за чего все значения отображаются как ✓, даже если они имеют значение False. Я понятия не имею, как решить эту проблему!   -  person Chris C    schedule 22.01.2015


Ответы (1)


Хорошо, я наконец понял это. Проблема была на самом деле с моей опцией choices. Это то, что я определил как choices:

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

Я начал взламывать код django-tables2/columns/booleancolumn.py. Когда я установил функцию render, чтобы она просто возвращала заданное ей значение, я понял, что значение было «Да» или «Нет». Поскольку код преобразует эти значения с помощью bool(), он всегда возвращал True.

Без некоторой настройки я не думаю, что Django-Tables2 может обрабатывать «выборы» на BooleanField.

person Chris C    schedule 29.01.2015