【问题标题】:how to get all the related objects associated with a User in Django?如何在 Django 中获取与用户关联的所有相关对象?
【发布时间】:2014-05-08 10:03:40
【问题描述】:

我正在写一个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() 应该为那个User 返回所有saved searches。 如何让它工作?

谢谢

【问题讨论】:

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


    【解决方案1】:

    您在Searches 中拥有User 模型的ForeignKey。因此,您已经有一个从 any 用户对象到此模型中与该用户相关的所有搜索的反向引用。对于登录用户,您可以调用request.user.searches_set.all(),它会返回所有已保存的登录用户搜索。不知道你为什么写那个方法。在docs 阅读更多内容。

    【讨论】:

      【解决方案2】:

      试试:

      @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()

      【讨论】:

      • 谢谢,我现在看看它是如何工作的。我在这里发布了另一个问题,你能在这里帮忙吗:stackoverflow.com/questions/22720984/…
      • 这真的没必要。 Django 有专门的模型反向引用。
      猜你喜欢
      • 1970-01-01
      • 2011-12-21
      • 1970-01-01
      • 2019-05-30
      • 2019-12-03
      • 2011-01-15
      • 1970-01-01
      • 2012-07-04
      • 2015-11-12
      相关资源
      最近更新 更多