2011-05-19 8 views
8

मैं Djangoएक 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> में देश सूची बेक़ायदा प्रकट होता है। मैं इसे कैसे ऑर्डर कर सकता हूं?

उत्तर

15

आप ordering संपत्ति का उपयोग कर सकते , जैसा कि आप चाहते हैं उन्हें प्रदर्शित करेगा।

+0

बिना किसी कारण के मुझे मतदान करने के लिए धन्यवाद! –

+0

मैं @ cx42net से सहमत हूं। यदि हमारे उत्तर आपके लिए अच्छे नहीं हैं, तो बस स्वयं को समझाएं, इस तरह हम वास्तव में आपकी मदद कर सकते हैं – pavid

+0

एक -1 के साथ स्वीकृत! यह जादुई है <3 –

-1

कोशिश वर्ग मेटा में इस जोड़ने, वर्ग व्यक्ति के अंदर: आप देश वर्ग के लिए आदेश देने के सेट करते हैं

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

    class Meta: 
     ordering = ["name"] 

:

ordering = ['country'] 

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

+3

यह देश के नाम से नहीं, देश आईडी द्वारा क्रमबद्ध होगा। – Vanuan

7

आप नहीं कर सकते हैं या नहीं मॉडल के वर्ग मेटा में आदेश देने की विशेषता का उपयोग करना चाहते हैं, तो आप भी ऐसा कर सकते हैं:

आप एक प्रपत्र वस्तु बनाने की जरूरत है, कुछ की तरह:

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

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

अनिवार्य रूप से मैंने जिस तरह से चाहता था उसे क्रमशः स्वचालित रूप से जोड़े गए फ़ील्ड पर क्वेरीसेट अपडेट किया।

संबंधित मुद्दे