Python 更新实例Django模型保存方法中的FileField值
使用文件中的total行的total值更新total字段的最佳方式是什么? 在模型、视图或其他视图中实现?如何使文件注册将始终通过django管理 models.pyPython 更新实例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
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()
方法。