给定这些模型
class User(Model):
pass
class Post(Model):
by = ForeignKey(User)
posted_on = models.DateTimeField(auto_now=True)
我想获取最新的
Post
,但不是全部都来自同一个User
,我有类似以下内容:posts = Post.objects.filter(public=True) \
.order_by('posted_on') \
.distinct("by")
但是在MySQL上,distinct无效,我想知道是否还有另一种方法?
我已经看到一些使用
values()
的方法,但是values
不适用于我,因为我需要对对象本身做更多的事情 最佳答案
由于distinct在其他字段上无法与MySQL一起使用,因此无法对id
进行建模,因此使用Subquery可能是一种解决方法:
from django.db.models import Subquery, OuterRef
...
sub_qs = Post.objects.filter(user_id=OuterRef('id')).order_by('posted_on')
# here you get users with annotated last post
qs = User.objects.annotate(last_post=Subquery(sub_qs[:1]))
# next you can limit the number of users
还要注意,在
posted_on
字段上的排序取决于您的模型约束-也许您需要将其更改为-posted_on
才能从最新的顶部开始进行排序。关于python - Django Query,在外键上不同,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59964901/