2016-07-16 15 views
0

Ich versuche, diese Tabelle mit einem anklickbaren Feld zu machen, das den Booleschen Wert für den Eintrag auf seinen entgegengesetzten Wert ändert. Es funktioniert, aber ich möchte einen alternativen Text wie "False" oder "True" sieht nicht gut aus, und die Benutzer sind hauptsächlich Norweger.Django-tables2 - kann ich nicht [A ('argument')] innerhalb des Parameters "text" verwenden?

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'} 

Wenn Sie unter „bezahlt“ Eintrag sehen ich dieses Recht bin jetzt testen, warum kann ich nicht auf die Daten mit dem gleichen Accessor, wie ich in dem args tun? Wenn ich die Argumente in args = [A ('payed')] ändere und den Link betrachte, hat er tatsächlich die richtigen Daten. Die Modellnamen sind dieselben wie die in dieser Tabelle, und "bezahlt" und "gesendet" sind BooleanFields.

Dies ist eine Art, was ich will schließlich:

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

Hier ist, was ich an den Tisch schicken:

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

Antwort

0

Das text Argument eine aufrufbare erwartet, die einen Datensatz akzeptiert und gibt eine Textwert Sie übergeben ihm eine Liste (die er einfach ignoriert), und Ihre Funktion erwartet einen booleschen Wert anstelle eines Datensatzes. Außerdem müssen Sie hier keine Accessoren verwenden.

So etwas sollte funktionieren:

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

Dann in Ihrer Spalte:

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

(Hinweis, es ist nicht klar, aus Ihrer Frage ist, woher die Daten kommen - ist paid ein boolean ? Sie müssen möglicherweise anpassen, um zu passen).

Nebenbei ist die Art, wie Sie args zu Ihren Spalten übergeben ist seltsam (es scheint, dass die Dokumentation empfiehlt auch, aber ich verstehe nicht, warum - es ist sehr verwirrend). Ein Standard-Ansatz wäre:

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

oder mit benannten Argumente:

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

die "bezahlt" und "gesendet" sind booleans ja. Die Werte, mit denen ich die Tabelle versehe, sind eine Liste von Wörterbüchern, ich könnte grob eine for-Schleife machen und den Eintrag in den Wörterbüchern stattdessen auf norwegisch programmatisch ändern, aber wäre das mehr als nur die Verwendung der bereitgestellten Funktion? Aber ich änderte die Tabellen, wie Sie sagten, und es warf diesen Fehler: \t 'dict' Objekt hat kein Attribut 'bezahlt'. Was seltsam ist, wenn man sieht, wie das Wörterbuch aussieht: http://pastebin.com/driAQ0yv –

+0

Verwenden Sie 'record ['paid']' - das sollte funktionieren. Ich dachte, es wäre ein Objekt statt eines Diktats. – solarissmoke

+0

das hat tatsächlich funktioniert danke. Ich habe versucht, die "A ('ID')" und es warf diesen Fehler: "Die enthaltene URLconf '24' scheint keine Muster darin. Wenn Sie gültige Muster in der Datei sehen, dann wird das Problem wahrscheinlich verursacht durch ein kreisförmiger Import. " wenn du neugierig wärst. –