diff --git a/tests/app/models.py b/tests/app/models.py index 63f6f46b..188aed3e 100644 --- a/tests/app/models.py +++ b/tests/app/models.py @@ -1,6 +1,7 @@ # coding: utf-8 from __future__ import unicode_literals +from django.conf import settings from django.contrib.contenttypes.fields import GenericForeignKey from django.contrib.contenttypes.models import ContentType from django.db import models @@ -98,8 +99,15 @@ class PersonInformation(models.Model): Person, related_name='info_list', verbose_name='Information') +class Player(models.Model): + person = models.ForeignKey(Person) + created = models.DateTimeField(auto_now_add=True) + score = models.PositiveIntegerField() + + # -- haystack ----------------------------------------------------------------- + if not six.PY3: # Haystack isn't compatible with Python 3 from haystack import indexes diff --git a/tests/test_models.py b/tests/test_models.py index f1b33774..ff1b44c1 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -1,11 +1,13 @@ # coding: utf-8 +from random import randint + +import django_tables2 as tables import pytest from django.db.models.functions import Length from django.utils import six +from django_tables2 import RequestConfig -import django_tables2 as tables - -from .app.models import Occupation, Person, PersonProxy +from .app.models import Occupation, Person, PersonProxy, Player from .utils import build_request pytestmark = pytest.mark.django_db @@ -57,7 +59,7 @@ class Meta: class ComplexModel(models.Model): char = models.CharField(max_length=200) - fk = models.ForeignKey('self') + fk = models.ForeignKey('self', on_delete=models.CASCADE) m2m = models.ManyToManyField('self') class Meta: @@ -401,3 +403,31 @@ class Meta: assert Person.objects.get(pk=person1.pk) == person1 assert Person.objects.get(pk=person2.pk) == person2 + + +def test_issue_361(per_page=5): + + bob = Person.objects.create(first_name='Bob', last_name='Builder') + eve = Person.objects.create(first_name='Eve', last_name='Dropper') + + for i in range(10): + Player.objects.create(person=bob, score=randint(0, 200)) + Player.objects.create(person=eve, score=randint(200, 400)) + Player.objects.create(person=bob, score=5) + Player.objects.create(person=eve, score=5) + + class UserPlayerTable(tables.Table): + class Meta: + model = Player + fields = ('person.name', 'score',) + order_by = ['score', 'person.first_name'] + orderable = False + + queryset = Player.objects.filter(score=5) + + table = UserPlayerTable(queryset) + RequestConfig(request, paginate={'per_page': per_page}).configure(table) + html = table.as_html(request) + + # count the number of rows, subtract one for the header + assert (html.count('