Получить значения из другой таблицы 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')
Вернуться на верх