Невозможно отсортировать пользовательский ForeignKey в Django

Итак, у меня в основном есть форма Django для смены владельца элемента, но пользователи появляются в неалфавитном и пока еще неконтролируемом порядке.

class myModel(models.Model):
    owner = models.ForeignKey(User, null=True, blank=True)

Поскольку я использую встроенную модель, я не могу понять, как получить поле «владелец» для сортировки по имени пользователя при вызове формы ниже.

class OwnerChange(ModelForm):
    required_css_class = 'required'
    class Meta:
        model = myModel
        fields = ['owner']

person Joseph Dattilo    schedule 26.08.2015    source источник


Ответы (1)


В вашей модели форма может легко переопределить набор запросов.

class OwnerChange(forms.ModelForm):
    required_css_class = 'required'

    ## Update the queryset to order by username 
    owner = forms.ModelChoiceField(queryset=User.objects.order_by('username'))

    class Meta:
        model = Cluster
        fields = ['owner']

Не забудьте обновить импорт до

from django import forms

Другой вариант, который вы можете использовать, чтобы не обновлять все формы. Однако приведенный выше пример полезен, если вы не хотите сортировать все экземпляры в модели во всех запросах по имени пользователя.

class myModel(models.Model):
    owner = models.ForeignKey(User, null=True, blank=True)

    class Meta:
        ordering = ['owner__username']
person Othman    schedule 26.08.2015
comment
Большое спасибо! Хочу отметить, что второй вариант не работает. Это приведет к сортировке результатов типа myModel, а не результатов фактического набора запросов для внешнего ключа. По крайней мере из того, что я пробовал. - person Joseph Dattilo; 27.08.2015