Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 导入数据django导入导出不会在芹菜任务中创建对象_Python_Django_Xls - Fatal编程技术网

Python 导入数据django导入导出不会在芹菜任务中创建对象

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

我已经在项目中为asinc创建芹菜任务,并使用django导入导出在我的模型中创建对象。任务在本地计算机上运行,一切正常,但在服务器上对象不会创建。这是我的代码: signals.py:

@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芹菜
、创建导入作业并运行
运行导入作业
任务来使用芹菜导入