Python Django Многоуровневый запрос на присоединение - PullRequest
0 голосов
/ 03 декабря 2018

Сведения о задаче Я работаю над созданием пользовательского 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

В намерении передать идентификатор клиента в мой 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) Что такое замена django для SQL 'old_field_name AS some_new_name'?В таблицах данных, показанных выше, в таблицах учетных записей и клиентов есть столбец «ID».Я хочу поместить их вместе в один и тот же вывод JSON и, чтобы иметь возможность различать их, я бы хотел переименовать их.

3) На данный момент в моем наборе запросов есть члены поля из нескольких моделей.Как мне их сериализовать?Я понимаю, что мне нужно написать собственный сериализатор, который будет основан на двух моделях (для примера, показанного выше).Я запутался в том, что указывать в разделе model = и в разделе meta: *. 1028 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...