Форма Django QuerySet для ModelChoiceField - PullRequest
0 голосов
/ 20 октября 2010

У меня есть форма, в которой я использую следующее поле.

contact_country = forms.ModelChoiceField(queryset=Country.objects.all())

Модель Country выглядит следующим образом

class Country(models.Model):
    iso = models.CharField(max_length=2)
    name = models.CharField(max_length=80)
    printable_name = models.CharField(max_length=80)
    iso3 = models.CharField(max_length=3,null=True, blank=True)
    numcode = models.IntegerField(null=True, blank=True)
    special = models.BooleanField(default=False)

    def __unicode__(self):  
        return self.printable_name

    class Meta:
        ordering = [ 'printable_name' ]

Поле 'special' указывает, чтострана "особенная".Если страна «особенная», я хочу, чтобы она отображалась до остальной части списка - как я уверен, вы видели в других местах в Интернете (например, англоязычные страны, такие как Австралия, Великобритания и США, в верхней части списка).выберите, но также и с остальными странами).

Возможно ли это с помощью QuerySet?Или я должен искать в другом месте?

Ответы [ 3 ]

2 голосов
/ 20 октября 2010

Работает ли contact_country = forms.ModelChoiceField(queryset=Country.objects.order_by('special'))?

0 голосов
/ 18 марта 2011

Вы можете переопределить значение по умолчанию Порядок :

class Meta:
    ordering = [ '-special', 'printable_name' ]

Вы также можете написать пользовательский менеджер , но это не стоит ...

0 голосов
/ 20 октября 2010

Это не проверено, так что вы можете попробовать, но оно может не дать того, что вы хотите ...

на ваш взгляд сделайте это:

specials = Country.objects.filter(special=True)
all_of = Country.objects.all()

# worst thing is, this is a list, not a queryset...
new_list = list(specials)+list(all_of)

# add new object to you form...
YourForm.base_fields['contact_country'] = forms.ChoiceField(choices=[(x.id,x) for x in new_list])

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

Это решит вашу проблему с грязной внешностью, но это решение, которое я использовал, когда модель не может вам помочь ...

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