【问题标题】:Filter in ManyToManyField with through使用 through 过滤 ManyToManyField
【发布时间】:2023-03-05 09:28:02
【问题描述】:

我有模特:

class Player(models.Model) :
    ...
    teams = models.ManyToManyField("Team", through="PlayerTeam")

class Team(models.Model) :
    ...
    players = models.ManyToManyField("Player", through="PlayerTeam")

class PlayerTeam(models.Model) :
    player = models.ForeignKey(Player)
    team = models.ForeignKey(Team)
    date_begin = models.DateField()
    date_end = models.DateField(blank=True, null=True)

我想获取所有在所选球队中比赛的球员(date_end 为空)。我试过这个:

team = get_object_or_404(Team, pk=id)
players = team.players.filter(date_end__isnull=True)

但它不起作用,因为字段 'date_end' 不在 Player 模型中

【问题讨论】:

    标签: django


    【解决方案1】:

    使用这个:

    players = team.playerteam_set.filter(date_end__isnull=True).values_list('player', flat=True)
    

    【讨论】:

    • 返回玩家ID列表。我想获取玩家对象列表
    • 您需要对其应用更多的查询集过滤器吗?如果没有,请使用 [tp.player for tp in team.playerteam_set.filter(date_end__isnull=True).select_related()]
    • 我想通过 Player 模型中的某个字段添加顺序
    • 另外我想从 PlayerTeam 模型中添加一些关于玩家的信息
    • 您可以使用 Python 本身对列表进行排序并添加必要的信息。
    猜你喜欢
    • 2020-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-01
    • 2022-11-25
    • 1970-01-01
    • 2019-12-04
    • 2012-02-08
    相关资源
    最近更新 更多