设置
我有两个 Django (1.4.2) 模型,如下所示:
class CoreData(models.Model):
cdid = models.AutoField(primary_key=True,editable=False)
name = models.CharField(max_length=100,db_index=True,unique=True)
# etc
class DetailData(models.Model):
cdid = models.OneToOneField(CoreData,primary_key=True)
detl = models.CharField(max_length=100)
# etc
以及以下管理员定义:
class CoreDataAdmin(admin.ModelAdmin):
ordering = ['name']
readonly_fields = ('etc', )
admin.site.register(CoreData, CoreDataAdmin)
class DetailDataAdmin(admin.ModelAdmin):
ordering = ['cdid__name']
readonly_fields = ('etc', )
admin.site.register(DetailData, DetailDataAdmin)
在 Django 的管理界面中,这会导致在概览中对CoreData
和进行预期的排序DetailData
,换句话说,两个列表都按CoreData
name
字段的升序排序。
但是,没有DetailData
排序的是入口页面的下拉列表。它按升序cdid
排列。
总有一天你想改变这一点。
由于这个简化插图范围之外的原因,我像这样扩展了模型:
class CoreData(models.Model):
cdid = models.AutoField(primary_key=True,editable=False)
name = models.CharField(max_length=100,db_index=True,unique=True)
# etc
class Meta:
ordering = ['name']
class DetailData(models.Model):
cdid = models.OneToOneField(CoreData,primary_key=True)
detl = models.CharField(max_length=100)
# etc
class Meta:
ordering = ['cdid__name']
而且我相信我ordering
在第一次测试中保留了管理员定义。
观察
我所做的更改导致 Django 测试服务器上的处理时间增加(按数量级)。即使是项目概览页面也是如此。我什至看到了损坏的管道(由于我要说的是浏览器重试),在修改之前几乎没有延迟。所有 CPU 内核保持不变;大概是由于数据库请求的急剧增加而发生了减速。(我们这里不是在谈论数万条数据库记录,此外,受影响的管理项目概览页面显示的项目数量有限。)
到目前为止,一切都很好:如果我能恢复那个效果就好了。但即使改回原来的定义也不能改善这种情况。
问题
- 如何恢复测试服务器的“旧”性能?我需要在哪里清理?我已经恢复到原始定义并尝试(希望不大,但谁知道)一些
manage.py
没有任何结果的命令。DB 结构不受影响;那里没有任何改变。 - 是否有关于这两种
ordered
机制应该如何互操作的文档?到目前为止还没有发现。 - 您对此有何其他经验,或者每个人都只是使用
ModelForm
“ModelChoiceField”和queryset
方法?