Получить значения из другой таблицы python
Я хочу получить столбец с именем 'work_id' из таблицы Duties. Общим столбцом в таблицах User и Duties является account_id (для User) и ID (для Duties), это одно и то же значение. В модели Duties есть пк User. Сейчас у меня есть функция, которая отправляет csv файл на email с id, name и account_id столбцом из таблицы User.
def send_csv():
data = {}
person_data= User.objects.values('uid', 'state', 'account_id')
buffer = io.StringIO()
writer = csv.writer(buffer)
for person_data in User.objects.filter(state=User.Active):
writer.writerow([person_data.uid, person_data.account_id)
buffer = io.StringIO()
writer = csv.writer(buffer)
for person_data in User.objects.filter(state=User.Disabled):
writer.writerow([person_data.uid, person_data.account_id)
email = EmailMessage('CSV statistic', to=settings.MAIL)
email.attach('active.csv', buffer.getvalue(), 'text/csv')
email.attach('disabled.csv', buffer2.getvalue(), 'text/csv')
email.send()
Пожалуйста, помогите мне с этим, немного застрял. Я хочу также отправить столбец work_id с правильным uid и account_id из таблицы User
Пример таблицы: Пользователь
uid | name | last_name | state | account_id |
---|---|---|---|---|
1ldwd | John | Черный | активный | 123 |
2fcsc | Дрейк | Bell | disabled | 456 |
3gscsc | Pep | Guardiola | active | 789 |
4vdded | Steve | Salt | disabled | 012 |
Обязанности стола
uid | rate | hobbie | id | work_id |
---|---|---|---|---|
1sdeed | часть | футбол | 456 | 007 |
3rdfd | полный | хоккей | 789 | 022 |
45ffdf | full | regbie | 123 | 4567 |
455ggg | part | fishing | 012 | 332 |
IIUC, попробуйте merge
:
User = User.merge(Duties[['account_id', 'work_id']], on='account_id', how='left')
print(User)
# Output
uid name last_name state account_id work_id
0 1ldwd John Black active 123 4567
1 2fcsc Drake Bell disabled 456 7
2 3gscsc Pep Guardiola active 789 22
3 4vdded Steve Salt disabled 12 332
Общим столбцом в таблице User и Duties является account_id (для пользователя) и ID (для обязанностей)
Не существует столбца ID
для Duties
. Поэтому, если есть столбец ID
вместо account_id
, используйте эту версию кода:
User = User.merge(Duties.rename(columns={'ID': 'account_id'})[['account_id', 'work_id']], on='account_id', how='left')