Django AdminModel内联导致apache以100%CPU运行
我的django应用程序中有以下型号:Django AdminModel内联导致apache以100%CPU运行,django,python-2.7,Django,Python 2.7,我的django应用程序中有以下型号: 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
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,我猜您在
Stop
模型中有很多记录。一种解决方案是原始id\u字段内联链接。试试这个:
class LinkInline(admin.TabularInline):
model = Link
raw_id_fields = ('start',)
正如Bogdan所说,您的问题可能是由大量的Stop
记录造成的。您可能仍然希望在链接
内联中显式查看所有Stop
实例,而不是使用raw\u id\u字段
。这是可以实现的,但它是复杂的
将内联类更改为
class LinkInline(admin.TabularInline):
model = Link
form = 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
model,但也会加快加载速度
代码可能会混淆,如果您需要更多解释,请告诉我。您的Stop
模型中有多少条记录?是的,这确实是问题所在。它从数据库中提取了40多万条记录,显示在选择输入字段中。这不是个好主意。