Django: Как реализовать JOIN, используя Django ORM? - PullRequest
0 голосов
/ 30 сентября 2019

user_key, geo_key [30 / Sep / 2019 10:31:13] "POST / user / geog_user_mapping HTTP / 1.1" 500 142108

Ответы [ 3 ]

1 голос
/ 30 сентября 2019

В таблицах нет ничего плохого. Это просто потому, что вы пытаетесь получить доступ к user_key на dict, который может не работать, если этот dict не содержит атрибута user_key.

В вашем коде request.dataсловарь, который не имеет атрибута user_keyЭто должен быть доступ через keyword вместо attribute, что означает, что request.data['user_key'] будет работать

Попробуйте вместо этого:

User_Mapping.objects.all().select_related('geography').filter(user_key=request.data.get('user_key'))

РЕДАКТИРОВАТЬ:

После некоторого обсуждения request.data.get('user_key') может вернуть идентификатор пользователя вместо объекта пользователя, так что вы можете фильтровать по user_key_id. Вот так:

User_Mapping.objects.all().select_related('geography').filter(user_key_id=request.data.get('user_key'))
1 голос
/ 30 сентября 2019

Это должно сработать:

User_Mapping.objects.filter(user_key_id=request.data['user_key']).select_related('geo_key')

Django автоматически добавляет _id к любому столбцу FK.

Примечание , что select_related толькоусилитель производительности. Вы можете получить доступ к столбцам сторонней таблицы без него, например:

user_map = User_Mapping.objects.filter(user_key_id=request.data['user_key'])
user_map[0].geography.zone

print(list(user_map))
0 голосов
/ 30 сентября 2019

Сначала получите пользовательский объект, например:

user_object= User.objects.filter(id=request.data.user_key).first()

Ваши запросы должны выглядеть следующим образом:

User_Mapping.objects.filter(user_key=user_object).select_related('geo_key')

Geography.objects.filter(user_mapping__user_key=user_key)

User_Mapping.objects.filter(user_key=3).select_related('any_model_filed_name')

Это решит вашу проблему.

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