Django AdminModel内联导致apache以100%CPU运行

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

我的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(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多万条记录,显示在选择输入字段中。这不是个好主意。