django 文件字段重命名问题
django filefield renaming issue
我正在使用以下代码重命名通过表单上传的模型中 FileField 的文件名路径:
class Document(models.Model):
document_date = models.DateField(null=True)
document_category = models.CharField(null=False, max_length=255, choices=DOCUMENT_CATEGORY_CHOICES)
document = models.FileField(upload_to='documents/', max_length=100)
def save(self, *args, **kwargs):
ext = os.path.splitext(self.document.name)[1]
date = str(self.document_date).replace('-', '')
category = self.document_category
self.document.name = '%s_%s%s' % (date, category, ext)
super().save(*args, **kwargs)
这对于创建的新记录工作正常,但是当我使用表单更新这些记录时,记录会保存新的更新详细信息(日期 and/or 类别)并且我的数据库反映了新的文件名路径,但是文件夹中实际文件的文件名未更新。
是否有人能够阐明我哪里出了问题,以及我该如何解决这个问题?非常感谢任何帮助!
这是因为 save()
方法在每次更新操作时调用 。
我从 OP 了解到的是,在两种情况下你只需要 save()
方法,
1. 当一个新条目创建时
2.当document
字段changed/updated.
所以,尝试改变 save()
如下,
class Document(models.Model):
document_date = models.DateField(null=True)
document_category = models.CharField(null=False, max_length=255, choices=DOCUMENT_CATEGORY_CHOICES)
document = models.FileField(upload_to='documents/', max_length=100)
def save(self, *args, **kwargs):
<b>if not self.id or not Document.objects.get(id=self.id).document == self.document:</b>
ext = os.path.splitext(self.document.name)[1]
date = str(self.document_date).replace('-', '')
category = self.document_category
self.document.name = '%s_%s%s' % (date, category, ext)
super().save(*args, **kwargs)
我正在使用以下代码重命名通过表单上传的模型中 FileField 的文件名路径:
class Document(models.Model):
document_date = models.DateField(null=True)
document_category = models.CharField(null=False, max_length=255, choices=DOCUMENT_CATEGORY_CHOICES)
document = models.FileField(upload_to='documents/', max_length=100)
def save(self, *args, **kwargs):
ext = os.path.splitext(self.document.name)[1]
date = str(self.document_date).replace('-', '')
category = self.document_category
self.document.name = '%s_%s%s' % (date, category, ext)
super().save(*args, **kwargs)
这对于创建的新记录工作正常,但是当我使用表单更新这些记录时,记录会保存新的更新详细信息(日期 and/or 类别)并且我的数据库反映了新的文件名路径,但是文件夹中实际文件的文件名未更新。
是否有人能够阐明我哪里出了问题,以及我该如何解决这个问题?非常感谢任何帮助!
这是因为 save()
方法在每次更新操作时调用 。
我从 OP 了解到的是,在两种情况下你只需要 save()
方法,
1. 当一个新条目创建时
2.当document
字段changed/updated.
所以,尝试改变 save()
如下,
class Document(models.Model):
document_date = models.DateField(null=True)
document_category = models.CharField(null=False, max_length=255, choices=DOCUMENT_CATEGORY_CHOICES)
document = models.FileField(upload_to='documents/', max_length=100)
def save(self, *args, **kwargs):
<b>if not self.id or not Document.objects.get(id=self.id).document == self.document:</b>
ext = os.path.splitext(self.document.name)[1]
date = str(self.document_date).replace('-', '')
category = self.document_category
self.document.name = '%s_%s%s' % (date, category, ext)
super().save(*args, **kwargs)