Как упорядочить результаты отношений ForeignKey в форме Django? - PullRequest
13 голосов
/ 19 мая 2011

У меня есть эти модели в Django

class Country(models.Model):
    name = models.CharField(max_length=80)

class Person(models.Model):
    first_name = models.CharField(max_length=100, db_index=True)
    last_name = models.CharField(max_length=100, db_index=True)
    country = models.ForeignKey(Country)

и эта ModelForm

class PersonForm(forms.ModelForm):

    class Meta:
        model = Person

, когда я использую эту форму в шаблоне, все работает нормально, но список стран в <select> кажется беспорядочным.Как я могу это заказать?

Ответы [ 4 ]

20 голосов
/ 19 мая 2011

Вы можете использовать свойство ordering :

class Country(models.Model):
    name = models.CharField(max_length=80)

    class Meta:
        ordering = ["name"]

Если вы установите порядок в классе Country, он будет отображаться так, как вы хотите.

9 голосов
/ 19 мая 2011

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

Вам необходимо создать объект Form, что-то вроде:

from django import forms
class PersonForm(forms.ModelForm):
    country = forms.ModelChoiceField(queryset=Country.objects.all().order_by('name'))
    class Meta:
        model = Person

типы полей для моделей форм

6 голосов
/ 27 декабря 2016

Здесь есть 2 хороших ответа, но я хотел сохранить help_text, blank и другие параметры из модели без необходимости повторять их, а также не изменять порядок по умолчанию для модели.Вот что я сделал:

class PersonForm(forms.ModelForm):
    class Meta:
        model = Person

    def __init__(self, *args, **kwargs):
        super(PersonForm, self).__init__(*args, **kwargs)
        self.fields['country'].queryset = self.fields['country'].queryset.order_by('name')

По сути, я просто обновил набор запросов в автоматически добавленном поле, чтобы упорядочить его так, как я хотел.

0 голосов
/ 19 мая 2011

попробуйте добавить это в класс Meta, внутри класса Person:

ordering = ['country']

http://docs.djangoproject.com/en/dev/ref/models/options/#ordering

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...