Select related在Django中没有返回关系的所有值



我正在做这个查询

SELECT [User].[User_Id], [User].[Client_id], [User].[EMail], [User].[First_Name], [User].[Family_Name], [User].[Telephone], [Clients].[Client_Id], [Clients].[Name], [Clients].[Organization_type] FROM [User] INNER JOIN [Clients] ON ([User].[Client_id] = [Clients].[Client_Id]) WHERE [User].[EMail] = 'birna@athygli.is'

在SQL服务器工作良好,即使我在django打印的查询集看起来很好,但是,当得到的结果是不从客户的表,它必须是一些与django表之间的关系,但我真的不知道在哪里

这是我的两个模型

class V2_Clients(models.Model):
Client_Id = models.CharField(primary_key=True, max_length=50)
Name = models.CharField(max_length=255, null=True)
Organization_type = models.CharField(max_length=128, null=True)
class Meta: 
managed = True
db_table = "[Clients]"
class V2_Users(models.Model):
User_Id = models.CharField(primary_key=True, max_length=50)
Client = models.ForeignKey(V2_Clients, on_delete=models.CASCADE)
EMail = models.CharField(max_length=250)
First_Name = models.CharField(max_length=50, null=True)
Family_Name = models.CharField(max_length=50, null=True)
Telephone = models.CharField(max_length=50, null=True)
class Meta: 
managed = True
db_table = "[User]"

这是我做查询的地方,即使我做print(v2_user.query),我得到相同的SQL显示在顶部,但不是从Clients表中获得值,只有从User的结果

v2_user = V2_Users.objects.using('sl_v2').filter(EMail=jsonData['Client']['Client_Email']).select_related()

有什么问题吗?

所以一个客户端可以有多个用户,但是一个用户只能有一个客户端。从你的模型来看。您希望从User表和本例中所有相关的Client表中获取数据。如果我没理解错的话。

views.py

user = V2_Users.objects.get(email=email_json) 
return render(request, tmpl_name, {"user":user})

模板

First name: {{ user.First_name }}
Client: {{ user.client.Name }}

select_related正在做内部SQL的连接(这意味着如果你试图访问一个客户端对象之后立即,它将不需要做另一个SQL操作),但Django返回的QuerySet将与对象的QuerySet定义一致。

如果需要Client表中的信息,可能需要使用annotate方法将该列信息添加到返回的Queryset

中或者,您应该能够通过v2_user.client从Client表访问您想要的任何信息(就像前面的答案一样)。

最新更新