2013-03-22 9 views
5

में वस्तुओं लिस्टिंग मैं निम्नलिखित मॉडल:Django प्रीफ़ेच जब व्यवस्थापक

class UserProfile(models.Model): 
    name = models.CharField() 
    info = models.OneToOneField(UserInfo, related_name='user') 

class UserInfo(models.Model): 
    def __unicode__(self): 
    return self.user.__unicode__() + self.age 
    age = models.IntegerField() 

class Ticket(models.Model): 
    userinfo = models.ForeignKey(UserInfo) 

समस्या टिकट व्यवस्थापक इंटरफ़ेस में है। टिकट का userinfo फ़ील्ड ड्रॉपडाउन के रूप में प्रस्तुत किया जाता है। यदि डेटाबेस में बहुत सारे UserInfo हैं, तो उनमें से प्रत्येक डेटाबेस का नाम बनाने के लिए डेटाबेस (UserProfile) को एक एकल कॉल करता है।

जब मैं UserInfo ड्रॉपडाउन को प्रस्तुत कर रहा हूं तो संबंधित उपयोगकर्ता प्रोफाइल को प्रीफ़ेच करने के लिए मैं व्यवस्थापक (या कोई विजेट) कैसे कह सकता हूं?

class TicketAdminForm(forms.ModelForm): 
    class Meta: 
    model = Ticket 
    userinfo = forms.ModelChoiceField(queryset=UserInfo.objects.prefetch_related('user').all()) 

class TicketAdmin(admin.ModelAdmin): 
    form = TicketAdminForm 

admin.site.register(Ticket, TicketAdmin) 

अब जरूरत मॉडल एक एक एसक्यूएल क्वेरी के बजाय कई प्रश्नों के रूप में प्रीफ़ेच रहे हैं:

मैं

info = models.OneToOneField(UserInfo, related_name='user', prefetch_in_bulk=True) 
+0

'आपके पास अब क्या है ('__unicode__' को यूनिकोड वापस करना चाहिए, स्ट्रिंग नहीं) के बदले' वापसी यूनिकोड (" {} + {} "प्रारूप (self.user, self.age)) का उपयोग करें। –

उत्तर

8

की तरह कुछ के लिए देख रहा हूँ मैं एक तरह से यह करने के लिए पता लगा।

+5

यह वास्तव में डिफ़ॉल्ट रूप से Django का हिस्सा होना चाहिए। इस तरह के अनुकूलन करने में सक्षम होने के लिए पर्याप्त जानकारी होनी चाहिए। –

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