Django печатает много-много детей не в том же порядке, что и ввод - PullRequest
0 голосов
/ 24 октября 2018

У меня есть модель Tourguide, имеющая отношения многие ко многим с Places.Обе модели определены как:

class Tourguide(models.Model):
    id = models.AutoField(db_column='ID', primary_key=True, unique=True)
    title = models.CharField(db_column='Title', max_length=255, blank=True)
    places = models.ManyToManyField(Place, db_column='placesdj')
    places_app = models.CharField(max_length=255, db_column='places')
    created_on = models.DateTimeField(db_column='Created_On', default = now)

    class Meta:
        managed = False
        db_table = 'tourguide'

    def __str__(self):
        return self.title

class Place(models.Model):
   place_id = models.AutoField(db_column='ID', primary_key=True)
   place_name = models.CharField(db_column='Place_Name', max_length=255)
   address_line_1 = models.CharField(db_column='Address_Line_1', max_length=255)
   address_line_2 = models.CharField(db_column='Address_Line_2', max_length=255)
   area = models.CharField(db_column='Area', max_length=255)


   class Meta:
       managed = False
       db_table = 'Place'

   def __str__(self):
       return self.place_name

ПРОБЛЕМА

Когда я пытаюсь напечатать places в tourguide, используя:

{% for place in tour.places.all %}
    <tbody>
    <td>{{ forloop.counter }}</td>
    <td>id: {{place.place_id}}, {{ place.place_name }} </td>
    <td> {{ place.description }} </td>
    </tbody>
{% endfor %}

Порядок мест все случайный и не совпадает с порядком, в котором я его ввел.Я хочу напечатать места в том же порядке, в котором я их разместил. Мой список для перечисления гидов и мест внутри них такой же.

def tour_list(request, template_name='tourguides/tour_list.html'):
    tourguide_list = Tourguide.objects.all()
    paginator = Paginator(tourguide_list,6)
    page = request.GET.get('page')
    tourguides = paginator.get_page(page)
    data = {}
    data['tourguides'] = tourguides

    return render(request, template_name, data)

Обновление У меня есть массивидентификаторов мест в таблице гидов, есть ли способ, которым я могу это использовать?

1 Ответ

0 голосов
/ 24 октября 2018

Реляционные базы данных не сортируют строки по умолчанию, и, поскольку они хранятся внутри всех типов странных структур данных, «порядок ввода» также отсутствует.

В качестве обходного пути вы можете использовать автоматически сгенерированное поле place_id в качестве ключа сортировки, так как оно гарантированно увеличивается при создании новых записей.Вы можете добавить сортировку по умолчанию к вашему классу Place, например:

class Place(models.Model):
   ...

   class Meta:
       ...
       ordering = ('place_id',)

Это будет гарантировать, что любые запросы, которые будут возвращать набор запросов Place, будут упорядочены по place_id по умолчанию (т.е.если у вас нет явного предложения .order_by()).

...