Python 导入数据django导入导出不会在芹菜任务中创建对象
我已经在项目中为asinc创建芹菜任务,并使用django导入导出在我的模型中创建对象。任务在本地计算机上运行,一切正常,但在服务器上对象不会创建。这是我的代码: signals.py:Python 导入数据django导入导出不会在芹菜任务中创建对象,python,django,xls,Python,Django,Xls,我已经在项目中为asinc创建芹菜任务,并使用django导入导出在我的模型中创建对象。任务在本地计算机上运行,一切正常,但在服务器上对象不会创建。这是我的代码: signals.py: @receiver(post_save, sender=BuildingProductUploadFile) def building_product_upload_file(instance, sender, **kwargs): if kwargs.get('created'): if instan
@receiver(post_save, sender=BuildingProductUploadFile)
def building_product_upload_file(instance, sender, **kwargs):
if kwargs.get('created'):
if instance.status == BuildingProductUploadFile.NEED_PROCESSING:
transaction.on_commit(import_building_product.s(instance.pk).delay)
tasks.py:
@celery.task(bind=True)
def import_data(self, dataset, building, resource):
logger.info(f'start import')
return resource.import_data(
dataset,
building=building,
use_transactions=True,
)
@celery.task(bind=True)
def import_building_product(self, upload_id):
logger.info(f'start task: {self.name}')
dataset = Dataset()
product_resource = ImportProductBuildingResource()
upload_file = BuildingProductUploadFile.objects.get(id=upload_id)
logger.info(f'get file id: {upload_file.id}')
try:
with open(upload_file.file.path, 'rb') as file:
dataset.xls = file.read()
result = import_data(
dataset,
building=upload_file.building,
resource=product_resource
).delay()
logger.info(f'result: {result.rows}')
upload_file.log_journal['info']['totally_rows'] = result.total_rows
# upload_file.log_journal['total'] = result.total
upload_file.status = BuildingProductUploadFile.COMPLETE
error_list = []
for num_row, row in enumerate(result.rows):
if row.import_type == row.IMPORT_TYPE_ERROR:
upload_file.status = BuildingProductUploadFile.COMPLETE_WITH_ERRORS
logger.info(f'error in row task: {num_row}')
# errors = [element.error for element in row.errors]
# error_list.append(formatting(
# num=num_row,
# row=row.errors[0].row,
# errors=errors,
# debug_mode=settings.DEBUG_UPLOAD_GEAR
# ))
upload_file.log_journal['error_log'] = error_list
logger.info(f'error list task: {error_list}')
except XLRDError:
upload_file.log_journal['error_log'].append("Для загрузки требуется файл формата xlsx или xls.")
except Exception as err:
upload_file.log_journal['error_log'].append(err.__repr__())
finally:
self.update_state(
state="COMPLETED"
)
logger.info(f'file status: {upload_file.status}')
if upload_file.status == BuildingProductUploadFile.NEED_PROCESSING:
upload_file.status = BuildingProductUploadFile.COMPLETE
upload_file.save()
logger.info(f'file status after save: {upload_file.status}')
logger.info(f'end task: {self.name}')
导入_utils.py:
from decimal import InvalidOperation
from import_export import resources
from import_export.fields import Field
from import_export.widgets import DecimalWidget, CharWidget
from apps.building.models import ProductBuilding
class ImportProductBuildingResource(resources.ModelResource):
number = Field(
column_name='Обоснование',
attribute='number',
widget=NumberWidget()
)
name = Field(
column_name=ProductBuilding._meta.get_field('name').verbose_name,
attribute='name',
widget=NameWidget()
)
count = Field(
column_name='Количество',
attribute='count',
)
price = Field(
column_name='Цена',
attribute='price',
widget=PriceWidget()
)
building = Field(attribute='building')
class Meta:
model = ProductBuilding
fields = (
'id',
'number',
'name',
'count',
'price',
'building',
)
import_id_fields = ('building', 'number',)
def before_import_row(self, row, **kwargs):
row['building'] = kwargs['building']
return super(ImportProductBuildingResource, self).before_import_row(row, **kwargs)
当模型ProductBuilding中的任务完成对象未创建时。我应该通过什么考试?为什么在本地机器上一切正常?我不明白您是如何尝试这样做的,但是您可以通过安装
django import export芹菜
、创建导入作业并运行运行导入作业
任务来使用芹菜导入