2014-12-26 6 views
5

इतने सारे googling के बाद मुझे विचारों में संबंधित मॉडल डेटा प्राप्त करने के लिए कोई प्रासंगिक समाधान नहीं मिला।Django 1.6.x में दृश्यों में संबंधित मॉडल का डेटा कैसे प्राप्त करें?

चीजें मैं अजाक्स के माध्यम से सर्वर से अनुरोध कर रहा हूं और फ़ोल्डर और फ़ोल्डर निर्माता नाम (उपयोगकर्ता मॉडल से) लाने के लिए चाहता हूं। लेकिन यह मुझे निर्माता के पहले_नाम वापस नहीं किया था। यहाँ कोड

models.py

class UserFolder(models.Model): 
    creator = models.ForeignKey(User) 
    name = models.CharField(blank=False, max_length=150) 
    is_shared = models.BooleanField(default=False) 
    created_date = models.DateTimeField(auto_now_add=True) 
    modified_date = models.DateTimeField(auto_now=True) 

    def __str__(self): 
     return self.name 

views.py

def pagination(obj, request): 
    max = request.GET.get('max') if 'max' in request.GET else 1 
    paginator = Paginator(obj, max) # Show 25 contacts per page 
    page = request.GET.get('page') 
    try: 
     return paginator.page(page) 
    except PageNotAnInteger: 
     # If page is not an integer, deliver first page. 
     return paginator.page(1) 
    except EmptyPage: 
     return "" 

def folder_list(request): #called via ajax 
    folders = UserFolder.objects.filter(creator=request.user.id).order_by('-modified_date') 
    folders = pagination(folders, request) #for pagination 
    folders = json.dumps({}) if not folders else serializers.serialize("json", folders) 
    return HttpResponse(folders) 

मैं .select_related ('निर्माता') की कोशिश की है है भी, लेकिन यह काम हमारा इस तरह।

js में मैं इस तरह डेटा प्राप्त करने में कर रहा हूँ:

$.each(data, function(i, v) { 
         var t = fldrTpl, id = v.pk; 
         v = v.fields 
         t = t.replace(/\{(ID)\}/g, id); 
         t = t.replace(/\{(NAME)\}/g, v.name); 
         t = t.replace(/\{(C_SIZE)\}/g, (v.current_size == null?0:v.current_size)); 
         t = t.replace(/\{(C_ID)\}/g, v.creator.first_name); 
         t = t.replace(/\{(C_DATE)\}/g, v.created_date); 
         $(".my-folder-table").append(t); 
        }); 

v.creator.first_name हमेशा अपरिभाषित लौट आते हैं।

किसी भी मदद की वास्तव में सराहना की जाएगी।

धन्यवाद

+0

यह नहीं होना चाहिए request.user.id के बजाय फ़ोल्डर = UserFolder.objects.filter (creator = request.user)। request.user उपयोगकर्ता का एक उदाहरण है जबकि .id एक पूर्णांक में परिणाम। – user2707389

+0

आपकी टिप्पणी के लिए धन्यवाद लेकिन मैंने यह भी कोशिश की है और यह भी काम नहीं किया गया था। यह केवल उपयोगकर्ता फ़ोल्डर्स के फ़ील्ड लौटाता है। –

+0

क्या आपने उपयोगकर्ता मॉडल पर first_name प्रविष्टि का परीक्षण किया था, और हमें उपयोगकर्ता मॉडल विवरण भी प्रदान किया था। –

उत्तर

1

तुम हमेशा के डेटा का एक शब्दकोश आप अपने ग्राहक पक्ष पर उपयोग करना चाहते हैं बना सकते हैं:

def folder_list(request): #called via ajax 
    folders_obj = UserFolder.objects.filter(creator=request.user).select_related('creator').order_by('-modified_date').all() 
    folders_dict = [] 
    for folder in folders_obj: 
     d = {} 
     for k, v in folder.__dict__.items(): 
      d[k] = str(v) 
     d["creator__first_name"] = folder.creator.first_name 
     folders_dict.append(d) 
    folders = pagination(folders_dict, request) #for pagination 
    folders = json.dumps({}) if not folders else serializers.serialize("json", folders) 
    return HttpResponse(folders) 

और अपने js में:

t = t.replace(/\{(C_ID)\}/g, v.creator__first_name); 
+0

आपके उत्तर के लिए धन्यवाद, लेकिन अभी भी एक त्रुटि मिली है "अधिकांश 1 तर्कों पर अपेक्षित अपडेट, 2" –

+0

हां मैंने इसे ठीक किया। – nima

+0

त्वरित प्रतिक्रिया के लिए धन्यवाद लेकिन अभी भी तय नहीं है "सूची" ऑब्जेक्ट में कोई विशेषता नहीं है 'जोड़ें' ' –

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