2010-02-26 3 views
0

Я установил атрибут Meta для моей модели Django, считая, что Django будет использовать его при сравнении экземпляров. (ordering_number является IntegerField в моей модели.)Заказ моделей Django

Например, если у меня есть экземпляр a с ordering_number = 4 и экземпляр b с ordering_number = 7, я бы ожидать, что a < b будет True. Тем не менее, я протестировал его, и он, похоже, не работал. Я не понял, по какой логике a < b выйдет True.

Кто-нибудь знает? Почему Django не использует ordering для сравнения элементов?

ответ

2

От the documentation:

упорядочения по умолчанию для объекта, для использования при получении списков объектов

Так почему ваши сравнения не работают, потому что они не предназначены, что путь. Определите __lt__() и др., Чтобы определить порядок экземпляров.

+0

Хорошо, я сделал, и он работает. Но было бы неплохо сделать это автоматически для всех моделей Django? –

+0

Файл RFE, если вы чувствуете это страстно об этом. http://code.djangoproject.com/ –

+1

@ cool-RR: Это не очень хорошая идея. * Заказ по умолчанию * не обязательно означает, что оба объекта также сопоставимы. Например. на SO по умолчанию порядок пользователей определяется по имени, но, возможно, пользователь «больше», чем другой, в зависимости от его репутации. Это действительно вопрос контекста и просто применение порядка по умолчанию, так же как естественный порядок - это огромное вмешательство в бизнес-модель имо. –

Смежные вопросы