У меня проблема с созданием загружаемого экспорта в файл CSV, кто-нибудь знает проблему? это моя временная модель
class ReportPatientWizard(models.TransientModel):
_name = "report.patient.wizard"
_description = "Patient Reports"
patient_id = fields.Many2one('hospital.patient', string='Patient', readonly=True)
gender_filter = fields.Selection([('male', 'Male'), ('female', 'Female'), ('other', 'Other')],
string='Gender Filter')
def _prepare_csv_data(self, patients):
field_names = ['Name', 'Age', 'Gender'] # Field names for CSV headers
data = io.StringIO()
writer = csv.DictWriter(data, fieldnames=field_names)
writer.writeheader() # Write CSV header
for patient in patients:
row = {
'Name': patient.name,
'Age': patient.age,
'Gender': patient.gender,
# Add other fields as needed
}
writer.writerow(row)
return data.getvalue()
@api.multi
def download_patient_report(self):
# Ambil data pasien berdasarkan ID yang dipilih
patient = self.patient_id
# Filter data berdasarkan gender jika gender_filter dipilih
if self.gender_filter:
patients = self.env['hospital.patient'].search([('gender', '=', self.gender_filter)])
else:
patients = self.env['hospital.patient'].search([])
if not patients:
raise UserError(_('No patients found matching the criteria.'))
csv_data = self._prepare_csv_data(patients)
print(f"Records: {patients}")
# Prepare file name
filename = f'patient_report_{fields.Date.today()}.csv'
# Return a response to download the CSV file
return {
'type': 'ir.actions.act_url',
'url': 'web/content/?model=report.patient.wizard&id = {}&filename = {}&field=file'.format(self.id, filename),
'target': 'current',
}
def print_patient_report(self):
# Generate and download patient report as CSV
return self.download_patient_report()
и это view.xml
<record id = "report_patient_view" model = "ir.ui.view">
<field name = "name">Report Patient</field>
<field name = "model">report.patient.wizard</field>
<field name = "arch" type = "xml">
<form string = "Report Patient">
<!-- <field name = "patient_id"/>-->
<group col = "1">
<!-- <field name = "is_gender"/>-->
<field name = "gender_filter"/>
</group>
<!-- <field name = "journal_ids" required = "0" invisible = "1"/>-->
<footer>
<button name = "download_patient_report" string = "Download" type = "object" class = "oe_highlight"/>
<button string = "Cancel" class = "btn btn-default" special = "cancel"/>
</footer>
</form>
</field>
</record>
<record id = "action_report_patient_view" model = "ir.actions.act_window">
<field name = "name">Report Patient</field>
<field name = "res_model">report.patient.wizard</field>
<field name = "type">ir.actions.act_window</field>
<field name = "view_mode">form</field>
<field name = "view_id" ref = "report_patient_view"/>
<field name = "target">new</field>
</record>
<menuitem id = "menu_report"
name = "Report Patients"
parent = "menu_hospital_operations"
action = "action_report_patient_view"
sequence = "15"/>
здесь я хочу создать фильтр формы, чтобы пользователь мог выбрать, какого пола он хочет получить данные, но после того, как я нажал кнопку загрузки, появилась проблема это ошибка
я ожидал, что когда я нажму кнопку загрузки, начнется загрузка
Вопрос отмечен тегом odoo-16, но вы использовали @api.multi, проверьте Миграция на версию-13.0
извини @api.multi, я забыл удалить, но это тоже не помогает






Вы указали поле в маршруте, но у вас нет поля с именем file.
Вам нужно добавить двоичное поле и установить его содержимое сразу после имени файла.
Пример:
# Prepare file name
filename = f'patient_report_{fields.Date.today()}.csv'
self.file = base64.b64encode(csv_data.encode('utf-8'))
Вы можете добавить self.ensure_one() в начало функции download_patient_report, чтобы убедиться, что self содержит одну запись.
Привет, я ничего не знаю о фреймворке, поэтому, возможно, я упускаю что-то, что кажется мне незаметным (очевидным для других), но после этого
csv_data = self._prepare_csv_data(patients)я не вижу, чтобы что-то произошло сcsv_datavar. Как используется эта переменная?