Python 更新实例Django模型保存方法中的FileField值

Python 更新实例Django模型保存方法中的FileField值,python,django,django-models,Python,Django,Django Models,使用文件中的total行的total值更新total字段的最佳方式是什么? 在模型、视图或其他视图中实现?如何使文件注册将始终通过django管理 models.py class Registry(models.Model): file_upload = models.FileField(blank=True, null=False) #csv or xlsx total = models.CharField(max_length=100, null=True, blank=Tru

使用文件中的total行的total值更新total字段的最佳方式是什么? 在模型、视图或其他视图中实现?如何使文件注册将始终通过django管理

models.py

class Registry(models.Model):

   file_upload = models.FileField(blank=True, null=False) #csv or xlsx
   total = models.CharField(max_length=100, null=True, blank=True, default=None)

   def save(self):
     with open(self.file_upload) as f:
        self.total = sum(1 for line in f)
        return self.total
错误:

 TypeError: expected str, bytes or os.PathLike object, not FieldFile

self.file\u upload
的输出是一个FieldFile对象。您应该将其更改为
self.file\u upload.path
where将为您提供文件的字符串路径

为了确保你上传的
self.file\u不是None/Null,你也应该验证它

def save(self):
    if self.file_upload:
        with open(self.file_upload.path) as f:
            ....

您可以阅读本文档了解更多信息。文件上传的输出是一个FieldFile对象。您应该将其更改为
self.file\u upload.path
where将为您提供文件的字符串路径

为了确保你上传的
self.file\u不是None/Null,你也应该验证它

def save(self):
    if self.file_upload:
        with open(self.file_upload.path) as f:
            ....

您可以阅读本文档了解更多信息

您可以使用
.read()
方法简单地读取上传文件的文件内容

然后对这些内容做任何你想做的事情

def save(self):
    self.total = sum(1 for line in self.file_upload.read())
    super(Registry, self).save(*args, **kwargs) 

无需再次在操作系统级别打开。

您只需使用
.read()
方法读取上传文件的文件内容即可

然后对这些内容做任何你想做的事情

def save(self):
    self.total = sum(1 for line in self.file_upload.read())
    super(Registry, self).save(*args, **kwargs) 

无需再次在操作系统级别打开。

如果需要对将要创建的大多数实例使用该方法,我通常会选择model part。但在本例中,我可能会选择Django表单来处理此业务逻辑。顺便说一下,你可以选择所有的可能性。至少在这两种情况下你都能达到你所需要的。如果业务逻辑经常更改,我可以建议将这些逻辑移动到视图或表单中。
您遇到的错误是关于open语句的,该语句需要在错误消息中声明的类型之一。要实现这一点,您可以将
self.file\u upload
更改为
self.file\u upload.path
,这是文件上载的路径。我强烈建议您使用csv模块或excel文件库来处理文件读取操作。

如果需要对将创建的大多数实例使用该方法,我通常选择模型零件。但在本例中,我可能会选择Django表单来处理此业务逻辑。顺便说一下,你可以选择所有的可能性。至少在这两种情况下你都能达到你所需要的。如果业务逻辑经常更改,我可以建议将这些逻辑移动到视图或表单中。
您遇到的错误是关于open语句的,该语句需要在错误消息中声明的类型之一。要实现这一点,您可以将
self.file\u upload
更改为
self.file\u upload.path
,这是文件上载的路径。我强烈建议您使用csv模块或excel文件库来处理文件读取操作。

您是否尝试过
打开(self.file\u upload.path)
打开(self.file\u upload.url)
您是否尝试过
打开(self.file\u upload.path)
打开(self.file\u upload.url)
如何在django admin界面中显示值和文件?在django admin中保存注册后,该文件不会显示,也不会显示总计中的值field@LidyMonteiro,你能检查一下更新后的代码,看看上面的代码是否有效吗?您忘记调用
save()
方法。如何在界面django admin中显示值和文件?在django admin中保存注册后,该文件不会显示,也不会显示总计中的值field@LidyMonteiro,你能检查一下更新后的代码,看看上面的代码是否有效吗?您忘记调用
save()
方法。