Есть форма ModelForm, с полем ModelChoiceField(queryset=Country.objects.all().order_by("name")) Производится выборка стран в select, нужно элемент Россия переставить в самое начало списка option, но при этом сохранить сортировку, можно ли это сделать в форме? или лучше через js?
под условие автора подходит второй вариант, но это плохой вариант, жесткий хардкод данных из бд в форме, потребуется сделать в начале другую страну придётся лезть в код, потребуется сделать несколько стран в начале придётся лезть код, при это никаких гарантий что таже Россия в писке стран есть нет, и нет гарантий что название в бд не поменяется..
Гораздо правильнее добавить интовое поле с сортировкой, и сортировать по двум полям по имени и этому полю.
Артём Клименко:
есть такой момент
Но мне кажетяс, что
0) лезть в код придется все равно - но при такх вариантах не придется искать что там где зачем меняет - те KISS
1) если в бд будет записано Роися, то ето само по себе баг - те тоже вроде как неплохо
2) если говорить правильный_вариант, то я б сделал привязку страны к ее трехбуквенному коду и вытягивал из настроек локали браузера пользователя данный код и ставил бы его страну на первое место
добавление инта в данном случае мне кажется контринтуитивным
sim3x: как мы делаем, добавляем в модель интовое поле order, которое по умолчанию специализируется одним значением допустим 1000, оно не уникально и у разных записей может совпадать, выбираем второе поле по которому будет осуществляться сортировка в случае если поле order одинаковое, в данном случае name.
Прописываем при необходимости поля в Meta.ordering
И собственно всё, появилась необходимость переместить некую запись в самое начало, открыли админку поменяли значение поля order, код при этом не меняется.
не так часто, но для смены сортировки просто не нужен программист, тот у кого есть права заходит в интерфейс и правит, никаких задач, тестов, коммитов, деплоев, рестартов.
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.