Django:如果我使用的是model.py中的函数,我在view.py中作为self传递什么?

时间:2016-09-25 04:56:47

标签: django django-models django-views

我创建了一个简单的Django视图,假设从我的模型中打印出名称字段列表。我在User模型中创建了一个函数来查询名称,并将其附加到列表中,然后返回。我想在我的视图类中调用此函数,并将该列表作为上下文传递,以便我可以在我的模板中使用它。

以下是我目前的代码。当我试图在views.py中调用它时,我不确定自我是什么意思。当我尝试传入我的模型名称(即User)时,它无效。那么自我假设究竟是在views.py中呢?提前致谢:D

用户models.py

def query_choice(self,query_choice):
    users_first_name = self.objects.values_list(query_choice)
    names = []
    for u in users_first_name:
        names.append(u)
    return names

views.py

def login(request):
    users_first_name = User.query_name(*self*,'first_name')
    template = loader.get_template('registration/home.html')
    context = {
        'output': users_first_name,
    }
    #return HttpResponse(output)
    return HttpResponse(template.render(context,request))

1 个答案:

答案 0 :(得分:1)

您应该在模型中使用@classmethod装饰器将query_choice定义为类方法:

@classmethod
def query_choice(cls, query_choice):
    return cls.objects.values_list(query_choice, flat=True)

然后你可以像下面这样打电话:

names = User.query_choice("first_name")

按照他们的方式,您可以使用render来节省加载模板的混乱,然后渲染它等等:

from django.shortcuts import render

def login(request):
    names = User.query_choice("first_name")
    return render(request, "registration/home.html", {"output": names})