3

设置

我有两个 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方法
4

0 回答 0