在Django 1.6.x中如何获取视图中关联模型的数据?

Arj*_*kur 5 python django ajax associations

经过如此多的谷歌搜索后,我没有找到任何相关的解决方案来获取视图中的关联模型数据.

事情是我通过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
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

我也试过.select_related('creator'),但它没有用.

在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);
                    });
Run Code Online (Sandbox Code Playgroud)

v.creator.first_name始终返回undefined.

任何帮助将非常感激.

谢谢

nim*_*ima 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)
Run Code Online (Sandbox Code Playgroud)

在你的js中:

t = t.replace(/\{(C_ID)\}/g, v.creator__first_name); 
Run Code Online (Sandbox Code Playgroud)