Получать данные из многих полей в той последовательности, в которой они были сохранены django

views.py. идентификаторы при сохранении [19, 18, 20]

inv.products.set(pd)

иды при извлечении [18, 19, 20]

products = obj.products.all()

Я хочу, чтобы он извлекал объекты в той последовательности, в которой он был сохранен

Запрос может быть отсортирован только по определенному полю, Django не может предположить иное, поэтому в вашем случае лучше всего сортировать продукты по дате их создания, например :

obj.products.all().order_by("created") 

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

Другой способ сделать это - указать опцию through, из документации :

вы можете использовать опцию through, чтобы указать модель Django, представляющую промежуточную таблицу, которую вы хотите использовать. Наиболее часто эта опция используется, когда вы хотите связать дополнительные данные с отношениями "многие-ко-многим".

.

Таблица through содержит первичный ключ отношения, вы можете использовать его для получения последовательности, в которой были добавлены ваши объекты.

например :

    from django.db import models

class Person(models.Model):
    name = models.CharField(max_length=50)

class Group(models.Model):
    name = models.CharField(max_length=128)
    members = models.ManyToManyField(
        Person,
        through='Membership',
        through_fields=('group', 'person'),
    )

class Membership(models.Model):
    group = models.ForeignKey(Group, on_delete=models.CASCADE)
    person = models.ForeignKey(Person, on_delete=models.CASCADE)
    inviter = models.ForeignKey(
        Person,
        on_delete=models.CASCADE,
        related_name="membership_invites",
    )
    invite_reason = models.CharField(max_length=64)

Проходное поле

Вернуться на верх