Django сохраняет порядок следования товаров при отображении

Предположим, я хочу, чтобы порядок товаров в моем веб-магазине Django отображался в определенном порядке. Как я могу этого добиться? Я упростил приведенный ниже пример, чтобы показать проблемы, с которыми я сталкиваюсь. В моделях моего интернет-магазина у меня есть 2 модели.

class TakeawayWebshop(models.Model):
    name = models.CharField(max_length = 255, help_text = 'name of takeaway restaurant')
    products = models.ManyToManyField(Product)

class Product(models.Model):
    name = models.CharField(max_length = 50, unique=True)
    description = models.TextField()
    price = models.DecimalField(max_digits=9, decimal_places=0, default=0.00)

    class Meta:
        ordering = ['-created_at']

В файле admin.py у меня есть

class TakeawayWebshopAdmin(admin.ModelAdmin):
    form = TakeawayWebshopAdminForm
    list_display = ['name']
    ordering = ['name']
    filter_horizontal = ('products',)

admin.site.register(TakeawayWebshop, TakeawayWebshopAdmin)

Теперь из админки я добавляю 3 товара в exact товар A, товар B и товар C в вебшоп с помощью filter_horizontal. product added the exact order. После сохранения объекта модели TakeawayWebshop продукты в поле filter_horizontal автоматически переставляются местами, так что порядок становится таким: продукт C, продукт B и продукт A.

Когда из views.py если я получаю список всех продуктов, которые я добавил в веб-магазин, например

webshop = TakeawayWebshop.objects.filter(name = 'my webshop name')[0]
products = webshop.products.all() 

Возвращенный набор запросов:

<QuerySet [<Product: Product C>, <Product: Product B>, <Product: Product A>]>

Очевидно, я использую неправильную стратегию, пытаясь заставить продукты в наборе запросов отображаться в том порядке, в котором я изначально планировал их расположить (продукт A, продукт B и продукт C) при вставке их в поле filter_horizontal. Как я должен решить эту проблему?

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