【发布时间】:2023-03-08 23:45:02
【问题描述】:
我正在使用django-import-export 允许我的应用程序的用户将他们自己的数据导入数据库。我已经使用所需的字段创建了适当的资源。它可以正常工作。
我接下来要做的是将使用过的文件与用户导入的数据一起添加,这样我就可以向用户展示他们导入的文件和他们的信息。
我没有将文件保存到我的服务器,只是处理它们。
首先,我创建了一个名为FileImported 的新模型来保存用于导入的文件的信息:
class FileImported(models.Model):
filename = models.CharField()
name = models.CharField()
size = models.DecimalField()
extension = models.CharField()
date = models.DateField(auto_now_add=True)
time = models.TimeField(auto_now_add=True)
timestamp = models.DateTimeField(auto_now_add=True)
user = models.ForeignKey(User, default=1, on_delete=models.CASCADE)
def __str__(self):
return self.filename
然后我必须传递文件信息:
result = imported_resource.import_data(dataset, dry_run=True,
raise_errors=False,
file_name=import_file_name,
user=self.request.user,
file_size=import_file_size,
file_extension=import_file_extension)
之后,我在导入之前创建了一个新的FileImported 模型对象:
class ImportedResource(resources.ModelResource):
.........
def before_import(self, dataset, using_transactions, dry_run, **kwargs):
file_name = kwargs.get('file_name', 'unknown')
name = os.path.splitext(file_name)[0]
file_size = kwargs.get('file_size', 'unknown')
file_extension = kwargs.get('file_extension', 'unknown')
user = kwargs.get('user', 'unknown')
file_name_model_object = FileImported .objects.get_or_create(filename=file_name,
name=name,
size=file_size,
extension=file_extension,
user=user)
我已将以下字段添加到我的模型中:
imported = models.BooleanField(default=False)
imported_file = models.ForeignKey(FileImported, on_delete=models.CASCADE,blank = True,null=True)
最明显的方法是将imported_file 字段添加到资源中的字段中。那样的话,我想,用户将不得不自己填写或将其留空或隐藏,然后我会稍后填写。
如果不是字段之一,我不确定如何将新创建的 FileImported 模型对象添加到我的数据的每一行。
我正在考虑使用 before_save_instance 并执行以下操作:
def before_save_instance(self, instance, using_transactions, dry_run):
instance.imported = True
instance.imported_file = ?
问题在于传递导入的文件信息(?)。
【问题讨论】:
标签: django django-import-export