2014-12-26 36 views
5

經歷了這麼多谷歌上搜索我did'nt發現在視圖中獲得相關的模型數據的任何相關的解決方案。在Django 1.6.x中如何獲取視圖中相關模型的數據?

東西我請求通過Ajax的服務器,想要提取的文件夾和文件夾的創建者名稱(從用戶模式)。但它沒有讓我知道創作者的名字。下面的代碼

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( '創造者')太多,但它did'nt工作。

在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總是返回undefined。

任何幫助將非常感激。

感謝

+0

它不應該是folders = UserFolder.objects.filter(creator = request.user)而不是request.user.id。 request.user是User的一個實例,而.id的結果是一個整數。 – user2707389

+0

感謝您的評論但我也嘗試過這一點,這也沒有奏效。它僅返回UserFolders的字段。 –

+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

感謝快速反應,但仍沒有固定的「‘清單’對象有沒有屬性‘添加’」 –

相關問題