2 回答

TA贡献1842条经验 获得超21个赞
不太确定,我明白,但看起来你想要你的 Foo 对象的最后一个雇主。那么你的 SerializerMethodField 可能如下(假设这里创建日期降序反映了你最近的雇主)
def get_employer(self, foo):
obj= foo.bar.all().order_by('-created')[0]
return obj.employer

TA贡献1848条经验 获得超10个赞
上面的代码的问题是,当我使用最后一种方法对queryset进行操作时
def get_employer(self, foo):
# use related manager to access related object
return foo.bar.last().employer
每次get_employer调用时,Django 都会查询数据库。阅读文档和其他几个答案后,我意识到使用该all()方法是重要的下一步,因为它将返回相关对象的查询集(在视图中预取)。令我感到奇怪的是,您不能像通常使用类似last()or的方法那样直接对相关对象进行操作,filter()但您可以遍历它们并进行过滤。
解决我的问题所需要做的就是返回 related_manager 查询集中的最后一项,我通过使用下标返回查询集中的最后一个对象来完成此操作。我敢肯定,有一些方法可以减少代码,但是它可以工作。
def get_employer(self, foo):
qs = foo.bar.all()
last = query.count()
obj = model_to_dict(qs[last-1])
return obj.get('employer')
添加回答
举报