我的模型在这里:
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)
但这不会只考虑每个用户的最后一个包。
您需要向模型添加日期时间戳:
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")