【问题标题】:Django filter by ForeignKey-attribute as UserDjango 通过 ForeignKey 属性作为用户过滤
【发布时间】:2020-07-04 06:04:19
【问题描述】:

我正在使用 Django 框架来制作数据库应用程序。我有一个我的数据库结构作为类。与“骑手”类具有 ForeignKey 关系的“Horse”类,而后者又与 User 具有 ForeignKey 关系。

一切正常,但我想过滤马匹,以便只显示连接到当前用户的马匹。

file: models.py

from django.contrib.auth.models import User


class Horse(models.Model):
    name = ...
    ...
    owner = models.ForeignKey('Rider')

class Rider(models.Model):
    name = ...
    ...
    user = models.ForeignKey(User)

所以当我渲染我的 html 页面时,我想相应地过滤马匹:

file: views.py

from .models import Horse

def Horses(request):
    horses = {
        'horses': Horse.objects.filter( ??????? )
    }
    return render(request, 'stable/horses.html', horses)

因此,如果我以“管理员”身份登录,我如何将其传递到过滤器中,以便与该用户有关系的骑手有关系的所有马匹都会显示?

在引用 ForeignKey 对象时似乎有所不同,而不仅仅是我无法弄清楚的属性。

【问题讨论】:

    标签: python django database filter foreign-keys


    【解决方案1】:

    您可以通过两个连续的下划线查看“直通”关系,因此您可以过滤Horse 对象,使其owner 具有作为user 的经过身份验证的用户:

    from django.contrib.auth.decorators import login_required
    
    @login_required
    def horses(request):
        horses = {
            'horses': Horse.objects.filter(owner__user=request.user)
        }
        return render(request, 'stable/horses.html', horses)

    注意:您可以使用 @login_required decorator [Django-doc].

     

    注意:函数通常用 snake_case 编写,而不是 PerlCase,因此它是 建议将您的函数重命名为 horses,而不是 Horses

    【讨论】:

    • 哇哦!正是我需要的!先生非常感谢您!笔记也很棒!
    猜你喜欢
    • 1970-01-01
    • 2020-12-11
    • 2017-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-14
    • 1970-01-01
    • 2022-11-12
    相关资源
    最近更新 更多