通过外键访问最后一个对象

问题描述 投票:0回答:1

我的模型在这里:

class UserToPackageMeta(models.Model):
    user = models.ForeignKey(
        User, on_delete=models.CASCADE, related_name="package_metas"
    )
    package = models.ForeignKey(
        "platforms.Package", on_delete=models.RESTRICT, related_name="user_metas"
    )


class Package(models.Model):
    platform = models.ForeignKey(
        Platform, on_delete=models.CASCADE, related_name="packages"
    )


class Platform(models.Model):
    slug = models.CharField(max_length=125, blank=True, null=True)

我想编写一个查询来获取基于他们拥有的 last 包上的 platfrom slug 的用户,因为任何用户都可以拥有不同的包:

我试过这个:

users = users.filter(package_metas__package__platform=platform)

但这不会只考虑每个用户的最后一个包。

django django-rest-framework orm
1个回答
0
投票

您需要向模型添加日期时间戳:

class Package(models.Model):
      platform = models.ForeignKey(Platform, on_delete=models.CASCADE)
      created_on = models.DateTimeField("Creation Date", blank=True, null=True)

然后你也可以

(1) 按日期排序(前面使用

-
进行降序排列):

user_packages = users.filter(package_metas__package__platform=platform)
last_package = result.order_by("-package_metas__package__created_on")[0]

(2) 或使用

latest
,如下所示:

user_packages = users.filter(package_metas__package__platform=platform)
last_package = result.latest("package_metas__package__created_on")
© www.soinside.com 2019 - 2024. All rights reserved.