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, набор запросов выглядит хорошо, но, когда получаю результаты, не получаю их из таблицы Clients`, Это должно быть что-то с отношением между таблицами в 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 (это означает, что если вы попытаетесь обратиться к объекту Client сразу после этого, ему не придется выполнять еще одну операцию SQL), но QuerySet, который возвращает Django, будет соответствовать определению QuerySet объекта.

Если вам нужна информация из таблицы Client, вы, вероятно, захотите воспользоваться методом annotate, чтобы добавить информацию из столбцов в возвращаемый Queryset

Альтернативно, вы должны иметь возможность получить доступ к любой нужной вам информации из таблицы Client через v2_user.client (как в предыдущем ответе).

Вернуться на верх