2014-12-26 21 views
5

Çok fazla arama yaptıktan sonra, ilişkili model verilerini görünüm olarak almak için uygun bir çözüm bulamadım.Django 1.6.x'te, ilişkili modellerin görünümlerindeki görünümleri nasıl edinilir?

Ajax üzerinden sunucuya birşeyler sormak ve klasörleri ve klasör yaratıcısı adını (Kullanıcı modelinden) almak istiyorum. Ama bana, içerik oluşturucunun ilk adını vermedi. Burada da kod

ben .select_related ('yaratıcısı') denedi

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) 

models.py ama o in iş. js ise

böyle veriler alınırken ediyorum:

$.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 daima tanımsız dönün.

Herhangi bir yardım gerçekten takdir edilecektir.

Teşekkür

daima size istemci tarafında kullanmak istediğiniz veri sözlüğü oluşturabilirsiniz
+0

:

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) 

Ve js folders = userFolder.objects.filter (creator = request.user) request.user.id yerine. request.user bir kullanıcı örneğidir. – user2707389

+0

Yorumunuz için teşekkürler Ama bunu da denedim ve bu da işe yaramadı. Yalnızca UserFolders alanlarını döndürür. –

+0

Kullanıcı modelinde first_name girişini test ettiniz ve kullanıcı modeli detaylarını da bize verdiniz. –

cevap

1

: olmamalı

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

Cevabınız için teşekkür ederiz, Ama yine de bir hata var "güncelleştirme en fazla 1 argüman bekleniyor, 2 var" –

+0

Evet Ben bunu düzeltdim. – nima

+0

Hızlı yanıt için teşekkürler, ancak hala sabit değil "'liste' nesnesinin hiçbir özelliği yok" ekle "" –

İlgili konular