Получать данные из многих полей в той последовательности, в которой они были сохранены 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)