0

Ich habe ein Modell Django wie folgt definiert:django-tables2 kann nicht sortiert werden bestimmte Felder

class DummyModel(models.Model): 
    name = models.CharField(max_length=100, name='Name') 
    description = models.CharField(name='Description', max_length=150) 
    time_points = models.PositiveIntegerField(name="Time Points") 
    more_text = models.CharField(max_length=100, name="More Text") 

    class Meta: 
     db_table = "dummy" 

Ich möchte später einige Anpassungen tun, so dass ich auch eine Tabellenklasse haben:

class DummyTable(tables.Table): 
    class Meta: 
     model = DummyModel 
     attrs = {'class': 'paleblue'} 

ich habe eine entsprechende Ansicht, die sich wie folgt:

@login_required(login_url="login/") 
def review(request): 
    table = DummyTable(DummyModel.objects.all()) 
    RequestConfig(request).configure(table) 
    return render(request, 'review.html', {'reviews': table}) 

Schließlich ich machen es meine Vorlage Ion mit:

{% block content %} 
    {% load static %} 
    {% load render_table from django_tables2 %} 
    <div class="function-container"> 
     {% render_table reviews %} 
    </div> 
{% endblock %} 

Jetzt macht dies in Ordnung, aber wenn ich versuche, die time Points Spalte zu sortieren (indem Sie auf den Spaltenkopf anklicken), kommt es mit dem Fehler:

Invalid order_by arguments: [u'Time Points'] 
Request Method: GET 
Request URL: http://127.0.0.1:8000/review/?sort=Time+Points 
Django Version: 1.10.5 
Exception Type: FieldError 
Exception Value:  
Invalid order_by arguments: [u'Time Points'] 

Allerdings, wenn ich den Browser verweisen auf http://127.0.0.1:8000/review/?sort=time_points, das funktioniert. Also, irgendwie wird der korrekte Feldname nicht übergeben. Ich versuchte, die name Ändern und Hinzufügen von verbose_namne Felder wie:

time_points = models.PositiveIntegerField(name="time_points", verbose_name="Time Points") 

Dies ist jedoch kehrt in no such column: dummy.time_points

Antwort

0

ich einen Weg gefunden, dies zu tun, die die Spalten in meiner table Klasse außer Kraft zu setzen ist. So, jetzt einfach mein Modell wie folgt aussieht:

class DummyModel(models.Model): 
    name = models.CharField(max_length=100) 
    description = models.CharField(max_length=150) 
    time_points = models.PositiveIntegerField() 
    more_text = models.CharField(max_length=100) 

    class Meta: 
     db_table = "dummy" 

Und in meiner benutzerdefinierten table Klasse, ich habe:

class DummyTable(tables.Table): 
    #Override here to change the column header text 
    time_points = tables.Column(verbose_name='Time Points') 
    more_text = tables.Column(verbose_name='More Text') 

    class Meta: 
     model = DummyModel 
     attrs = {'class': 'paleblue'} 

nun die Sortier funktionieren wie erwartet.

Verwandte Themen