2016-07-16 3 views
0

Я пытаюсь сделать эту таблицу с кликабельным полем, которое изменяет логическое значение для входа в противоположное значение. Он работает, но я хочу, чтобы альтернативный текст, как «False» или «True», выглядел неплохо, а пользователи в основном норвежские.Django-tables2 - не могу ли я использовать [A ('argument')] внутри параметра «текст»?

def bool_to_norwegian(boolean): 
    if boolean: 
     return "Ja" 
    else: 
     return "Nei" 


class OrderTable(tables.Table): 

    id = tables.LinkColumn('admin_detail', args=[A('id')]) 
    name = tables.Column() 
    address = tables.Column() 
    order = tables.Column() 
    order_placed_at = tables.DateTimeColumn() 
    order_delivery_at = tables.DateColumn() 
    price = tables.Column() 
    comment = tables.Column() 
    sent = tables.LinkColumn('status_sent', args=[A('id')]) 
    paid = tables.LinkColumn('status_paid', args=[A('id')], text=[A('paid')]) 

    class Meta: 
     attrs = {'class': 'order-table'} 

Если посмотреть под «платный» входом Я проверяю это прямо сейчас, почему я не могу получить доступ к данным с тем же аксессором, как я в аргументах? Если я изменю args на args = [A ('paid')] и посмотрю на ссылку, у нее действительно есть правильные данные. Имена моделей те же, что и в этой таблице, а «платные» и «отправленные» - это BooleanFields.

Это вроде того, что я в конечном счете хочу:

text=bool_to_norwegian([A('paid')]) 

Вот что я посылаю к столу:

orders = Order.objects.order_by("-order_delivery_at") 
orders = orders.values() 
table = OrderTable(orders) 
RequestConfig(request).configure(table) 

ответ

0

text аргумент ожидает отзывной, который принимает запись и возвращает текстовое значение. Вы передаете ему список (который он просто проигнорирует), и ваша функция ожидает булево, а не запись. Здесь также нет необходимости использовать аксессоры.

Что-то, как это должно работать:

def bool_to_norwegian(record): 
    if record.paid: 
     return "Ja" 
    else: 
     return "Nei" 

Затем в колонке:

paid = tables.LinkColumn('status_paid', text=bool_to_norwegian) 

(Обратите внимание, что это не ясно из вашего вопроса, где данные поступают из - это paid булево ? Возможно, вам придется настроить это, чтобы оно соответствовало).

В качестве стороннего способа, как вы проходите args, ваши колонны странны (похоже, документация также рекомендует это, но я не понимаю, почему - это очень запутанно). Более стандартный подход был бы:

id = tables.LinkColumn('admin_detail', A('id')) 

или используя именованные аргументы:

id = tables.LinkColumn('admin_detail', accessor=A('id')) 
+0

"Оплачен" и "отправленные" являются BOOLEANS да. Значения, которые я предоставляю таблице, - это список словарей, я могу, возможно, грубо сделать цикл for и изменить запись в словарях, чтобы читать на норвежском программном уровне вместо этого, но будет ли это более облагаться налогом, чем просто использовать функцию, как предусмотрено? Но я изменил таблицы, как вы сказали, и это забросило эту ошибку: \t Объект 'dict' не имеет атрибута 'paid'. Какой странный вид, как выглядит словарь: http://pastebin.com/driAQ0yv –

+0

Используйте 'record ['paid']' - это должно работать. Я думал, что это объект вместо дикта. – solarissmoke

+0

, который действительно работал, спасибо. Я попробовал сделать «A (« id »)», и он выбросил эту ошибку: «Входящий URLconf« 24 », похоже, не имеет в нем никаких шаблонов. Если вы видите допустимые шаблоны в файле, то проблема, вероятно, вызвана круговой импорт ». если вам было любопытно. –