如何在Django中获取与User关联的所有相关对象?

时间:2014-03-28 19:18:12

标签: django django-models django-views django-users

我正在写一个Django application用户可以保存"搜索"。

class Searches(models.Model):
        user = models.ForeignKey(User)
        ....

       def get_searches(self):
           try:
                search_list=Searches.objects.get(user)
           except:
                 return []
           else:
               return search_list.

因此,当用户登录时, 在我看来,

@login_required
def display_search_list(request):
     user=request.user
     search_list=user.get_searches()
     return render(request,"display.html",{'obj_list':search_list})

我的问题是关于get_searches(self) method我在上面定义的。 如何通过"当前登录的用户"得到search_list。 我感兴趣的是user.get_searches()应该返回saved searches的所有User。 如何让这个工作?

由于

2 个答案:

答案 0 :(得分:2)

您对User中的Searches模型有一个ForeignKey。因此,您已经将任何用户对象反向引用到此模型中与该用户相关的所有搜索。对于已登录的用户,您可以致电request.user.searches_set.all(),它将返回所有已登录用户的已保存搜索。不确定你为什么写这个方法。阅读更多docs

答案 1 :(得分:1)

尝试:

@login_required
def display_search_list(request):
    user=request.user
    search_list=Searches.objects.filter(user_id=user.id)
    return render(request,"display.html",{'obj_list':search_list})

如果你需要在Searches课程中有一个方法,我认为你的签名应该是:

def get_searches(self, id):

但是你需要创建一个对象来调用它。我只想在视图中构建列表。

它确实打破了MVC。 :)我相信使用get()方法是为了获得一行,为了获得多个,你应该使用filter()