我的django app中有这些模型:
class Route(models.Model):
pass
class Link(models.Model):
start = models.ForeignKey(Stop)
runtime = models.TimeField()
position = models.IntegerField()
route = models.ForeignKey(Route)
以及这些管理模式:
class LinkInline(admin.TabularInline):
model = Link
class RouteAdmin(admin.ModelAdmin):
list_display = ('id', 'show_link_count')
inlines = [
LinkInline,
]
def queryset(self, request):
return Route.objects.annotate(link_count=Count('link'))
def show_link_count(self, inst):
return inst.link_count
show_link_count.short_description = "Stop count"
当我尝试查看任何特定路由(并查看与其关联的链接列表)时,它会导致apache服务器在一个线程上运行100%并稳定地分配越来越多的内存。
我在这里做错了吗?
我使用django 1.6和apache 2.4.6运行Ubuntu 13.10
答案 0 :(得分:0)
我猜你在Stop
模型中有很多记录。解决方案是raw_id_fields
内联链接。试试这个:
class LinkInline(admin.TabularInline):
model = Link
raw_id_fields = ('start',)
答案 1 :(得分:0)
正如波格丹所说,你的问题可能是由Stop
的大量记录引起的。相反,使用raw_id_fields
的方式,您可能仍希望明确查看Stop
内联中的所有Link
个实例。这可以实现,但它很复杂。
将您的Inline类更改为
class LinkInline(admin.TabularInline):
model = Link
form = LinkForm
然后创建Linkform
Class LinkForm(forms.Form):
start = Stop.objects.values_list('id', 'something')
#I don't believe you just have an empty class
def clean(self):
cleaned_data = super(LinkForm, self).clean()
cleaned_data['start'] = Stop.objects.get(id=cleaned_data['start'])
return cleaned_data
在这种情况下,您仍然会加载Stop
模型的所有实例,但也可以快速加载。
代码可能会混淆,如果您需要更多解释,请告诉我。