[英]Showing fields of related m2o objects in django-admin
我有使用 modelAdmin 显示的 model 作业。 我也停止了 model:
class Stop(models.Model):
...
job = models.ForeignKey(to=Job, ...)
stop_number = ...
...
作业可以有 2 到 3 个停靠点。
我尝试使用以下方法显示第一站和第二站名称:
@admin.register(Job)
class JobAdmin(admin.ModelAdmin):
def stop_1(self, obj):
stop = self.stop_set.objects.get(stop_number=1)
return stop.name
def stop_2(self, obj):
stop = self.stop_set.objects.get(stop_number=2)
return stop.name
list_display = ('stop_1', 'stop_2', ...)
但它对每个列表视图渲染执行许多 SQL 查询,并且速度太慢。 有没有办法在单个或几个查询中查询所需的信息?
您应该将prefetch_related
添加到get_queryset
以在一个查询中预取对象并减少查询次数。
还有几点:
stop_set
是一个查询集,您可以在没有objects
的情况下对其调用.get()
stop_set
关闭obj
而不是self
。 obj
,是Job
object,它将引用列表显示中的一行。 self
是JobAdmin
class。@admin.register(Job)
class JobAdmin(admin.ModelAdmin):
def get_queryset(self, request):
qs = super().get_queryset(request).prefetch_related('stop_set')
return qs
def stop_1(self, obj):
stop = obj.stop_set.get(stop_number=1)
return stop.name
def stop_2(self, obj):
stop = obj.stop_set.get(stop_number=2)
return stop.name
list_display = ('stop_1', 'stop_2', ...)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.