2011-05-19 29 views
8

DjangoForeignKey ilişkisinin sonuçları Django formunda nasıl sipariş verilir?

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) 

bu modelleri var ve ben bir şablonda bu formu kullandığınızda bu ModelForm

class PersonForm(forms.ModelForm): 

    class Meta: 
     model = Person 

, her şey gayet iyi çalışıyor fakat <select> ülke listesi bozukluğu görünür. Nasıl sipariş verebilirim? Eğer ülke sınıfına sipariş ayarlarsanız

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

    class Meta: 
     ordering = ["name"] 

: Sınıf Kişi içeride, sınıf Meta içine bu ekleme

cevap

15

Sen ordering özelliğini kullanabilirsiniz Onları istediğiniz gibi gösterecektir. siz veya modelin sınıf Meta sipariş özellik kullanmak istemiyorsanız yapamıyorsanız

+0

Sebepsiz yere oy verdiğiniz için teşekkürler! –

+0

@ cx42net ile aynı fikirdeyim. Eğer cevaplarımız sizin için iyi değilse, sadece kendinize bir açıklama yapmanıza yardımcı olabiliriz. – pavid

+0

1 ile Kabul! Bu büyülü <3 –

7

, ayrıca bunu yapabilirsiniz:

Bir form nesnesi yapmak gereken bir şey gibi:

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

field types for formsmodels

3

Orada burada 2 iyi cevaplar var, ama bunları tekrarlamak zorunda ve ayrıca model üzerinde varsayılan sıralamasını değiştirmez olmadan help_text, blank korumak istedim ve modelden diğer ayarlar. İşte ne yaptım:

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') 

Esasen ben sadece istediğim şekilde sipariş otomatik olarak eklenir sahada Sorgu Kümesi güncellendi.

İlgili konular