任务详细信息 我正在基于提供的键信息创建一个自定义API来从三个表中获取数据。
背景 详细来说,我有三个数据表-Client,Account和Client_accounts,它们的结构如下所示:
Client
ID (Integer) Primary Key
display_name (varchar)
Accounts
ID (Integer) Primary Key
nickname (varchar)
Client_Accounts
Client_ID (Integer) Foreign Key -> ID from client table
Account_ID (Integer) Foreign Key -> ID from accounts table
打算将客户ID传递给我的API,并希望获取该客户拥有的所有帐户(和帐户名称)。
我要复制的SQL查询看起来像这样:
select
cl.id as client_id,
cl.display_name,
ac.id as account_id,
ac.nickname as account_name
from
datahub_clients cl
join
datahub_client_accounts cl_ac
on
cl.id=cl_ac.client_id
join
datahub_accounts ac
on
cl_ac.account_id=ac.id
where
cl.id=15
;
到目前为止完成 这就是我用来获取客户帐户的方法:
##### For endpoint - get_client_name
@api_view(['GET', 'POST'])
@permission_classes((AllowAny,))
def get_client_name(request):
try:
if request.method == 'GET':
list_of_account_ids = Client_Accounts.objects.filter(client_id=request.GET['id']).values_list('account')
needed_accounts = Accounts.objects.filter(id__in=list_of_account_ids).values('id','nickname')
return Response({'requested client id':request.GET['id'],'identified client name': 'detailed info to go here'}, status=status.HTTP_200_OK)
else:
return Response({'status':'error','message': 'Facepalm moment!'}, status=status.HTTP_403_FORBIDDEN)
问题陈述
1)在上面的代码中,我能够提取client_id的相关帐户,但是,我只能从帐户表中打印详细信息。如何将客户端信息也放置在输出中(client_id,昵称-如SQL查询所示)
2)SQL'old_field_name AS some_new_name'的django替换是什么?在上面显示的数据表中,客户表和客户表均具有“ ID”列。我想将它们放在同一JSON输出中,并且为了能够区分它们,我想重命名它们。
3)至此,我的查询集具有来自多个模型的字段成员。如何序列化它们?我知道我需要编写一个基于两个模型的自定义序列化器(对于上面的示例)。我对在model =部分和meta:部分中指定的内容感到困惑。