Сортировка поля ManyToMany автоматически в модели Django - PullRequest
0 голосов
/ 05 января 2011

В настоящее время у меня есть набор моделей, похожих на этот придуманный код:

class Pizza(models.Model):
    price = models.FloatField()
    topping = models.ManyToManyField(RouteGate, through="PizzaToppings")

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

class PizzaToppings(models.Model):
    class Meta:
        ordering=["order_to_add_topping"]

    pizza = models.ForeignKey(Pizza)
    topping = models.ForeignKey(Topping)
    order_to_add_topping = models.IntegerField()

Моя проблема в том, что происходит, когда я пытаюсь получить доступ к начинкам пиццы в порядке, указанном в таблице дополнительных полей PizzaToppings ManyToMany. Предположим, что в пицце есть сыр и ветчина, с order_to_add_topping в данных PizzaToppings, равным 0 и 1 соответственно:

>>> pizza = Pizza.objects.get(pk=490)
>>> pizza.toppings.all()[0].name
'Ham'

Это должно сказать "сыр". Я бы подумал, что RelationManager будет уважать поле ordering Meta class, но, похоже, это не так. Поэтому я думаю, что доступ к названию первой добавки, добавленной к пицце, не следует делать с pizza.toppings.all()[0].name.

Как получить к нему доступ? Это проблема с моим запросом к модели или у меня настроены мои модели?

1 Ответ

6 голосов
/ 05 января 2011

Ваша модель в порядке, вам просто нужно запросить отношения, так как теперь у вас есть сквозная связь с дополнительными полями.В вашем случае отношение создается автоматически как topping_relationship, поэтому ваш запрос должен быть:

pizza.toppings.order_by('topping_relationship__order_to_add_topping')
...