Как заставить выпадающий список Django Admin показывать только первый элемент "order by", а не по умолчанию models.py?
Я работаю над программой для создания сайтов.
Когда пользователь создает новую страницу, он должен выбрать язык (например, английский, французский, немецкий).
В Django Admin, в языковой админке, пользователь может установить порядок. Модель языка содержит:
order = models.PositiveSmallIntegerField(default=0, verbose_name='display order')
В параметрах страницы в Django Admin пользователь должен выбрать язык. Модель страницы содержит:
language = models.ForeignKey(Language, default=0, on_delete=models.PROTECT, verbose_name='language')
Проблема, с которой я столкнулся, заключается в том, что когда пользователь создает новую страницу в Django Admin, язык с PK 0 всегда выбирается по умолчанию, даже если он не первый в списке.
Язык 0 всегда предварительно выбирается Django, и пользователь не может установить язык по умолчанию для новых страниц, задав порядок отображения языков.
Я хочу, чтобы Django останавливал выбор 2-го или 3-го элемента в выпадающем списке и переходил к первому элементу как в обычном выпадающем списке.
Я предполагаю, что проблема связана с объявлением того, что язык по умолчанию равен 0 в модели page model, но я не смог заставить его работать, когда удалил его.
Я думаю, проблема в том, что вы смешиваете order
и pk
, которые оба являются 0
, но они не относятся к одной и той же вещи - следовательно, порядок не такой, как вы ожидаете.
Во-первых, вы можете установить порядок ваших Language
моделей в классе Meta:
class Language(models.Model):
...
class Meta:
ordering = ('order',)
Во-вторых, вы можете установить значение по умолчанию как вызываемое поле языка, которое всегда получает первое значение:
def get_default_language():
return Language.objects.first()
...
language = models.ForeignKey(Language, ..., default=get_default_language)
Это должно предварительно заполнить поле в админке Django возвращаемым значением.
Основная проблема с использованием callable по умолчанию заключается в том, что вы не можете передать ему никаких переменных, так что это значительно усложняет фильтрацию.
Если это не исправит ваш заказ, то вам, возможно, придется углубиться в настройку администратора.