我遇到了一个相当常见的问题,django管理内联会执行一大堆不必要的查询来填充下拉列表。有4个模型-当我查看用户时,我希望看到与该用户相关联的UserClientRoles,并显示ClientRole名称和客户端。当我只使用角色名称时,它会为每个UserClientRole查询一次(如果有3个分配,它将查询3次)。如果我包含客户机名称,它会为每个UserClientRole查询一次每个客户机名称。在
我尝试过这里概述的解决方案(Django admin inline: select_related),但没有骰子。它不会改变行为。我还尝试在UserAdmin类上重写get_queryset方法,使其无效。我所做的一切都不能减少查询的数量。为了简洁起见,我删除了一些模型的细节。在
以下是模型:
class User(models.Model):
id = models.AutoField(primary_key=True)
email = models.CharField(unique=True, max_length=200)
class Client(models.Model):
id = models.AutoField(primary_key=True)
client_name = models.CharField(unique=True, max_length=200)
client_identifier = models.CharField(unique=True, max_length=200)
class ClientRole(models.Model):
client_role_id = models.AutoField(primary_key=True)
role_name = models.CharField(unique=True, max_length=200)
client = models.ForeignKey(Client)
def __unicode__(self):
return self.role_name + self.client_id.client_name
class UserClientRole(models.Model):
user_client_role_id = models.AutoField(primary_key=True)
client_role = models.ForeignKey(ClientRole)
user = models.ForeignKey(User)
下面是管理模型:
^{pr2}$有什么线索吗?在
尝试:
Django并不总是最擅长决定选择哪些对象作为查询的一部分,尽管您可能认为Django ORM足够聪明,能够识别出这一点,因为您正在遍历一个形式为}中同时指定这两个参数对我来说是有效的。我建议你试试看!在
related_parent__related_child
的关系,不是这样的,所以确保在select_related
或{相关问题 更多 >
编程相关推荐