gpt4 book ai didi

django 如何将 get_or_create 与 FileField 和 upload_to 一起使用

转载 作者:行者123 更新时间:2023-12-05 07:35:08 25 4
gpt4 key购买 nike

我有一个用户上传数据文件的网站。为了防止用户上传重复的数据文件,我使用了 Django 的 get_or_create,它运行良好,直到我向模型添加了 upload_to

这是我的模型:

class TestFile(models.Model):
file = models.FileField(upload_to='data/%Y/%m/')
date = models.DateField(default=date.today)
welded_part = models.ForeignKey(WeldedPart, null=True, blank=True, on_delete=models.CASCADE)

def __str__(self):
return str(self.file)

上传文件调用以下函数:

def process_data_file(myfile, my_id):
a, created = TestFile.objects.get_or_create(file=myfile)
if created:
# do some number crunching here
a.welded_part = my_id
a.save()
return created

如果我尝试上传 testfile.xyz,它会检查 TestFile.object = 'testfile.xyz' 的对象。

我永远不会找到重复的文件,因为对象将文件存储为 'data/2018/04/testfile.xyz',而不是 'testfile.xyz' .

在此实例中使用 get_or_create 的正确方法是什么?

我正在使用 django 1.11.3

最佳答案

所以我想我解决了这个问题。我在我的模型中添加了一个文件名 CharField。更好的路径不依赖于日期,而是依赖于文件名的重要部分。

def testfilepath(instance, filename):
return 'testdata/%s/%s/%s' % (str(filename)[:4] , str(filename)[4:6] , str(filename))


class TestFile(models.Model):
file = models.FileField(upload_to=testfilepath)
filename = models.CharField(max_length=50, null=True)
date = models.DateField(default=date.today)
welded_part = models.ForeignKey(WeldedPart, null=True, blank=True, on_delete=models.CASCADE)

所以现在我可以检查文件名上的 get_or_create,它不包括路径

def process_data_file(myfile, my_id):
a, created = TestFile.objects.get_or_create(filename=str(myfile))
if created:
do some number crunching here
a.file = myfile
a.welded_part = my_id
a.save()
return created

关于django 如何将 get_or_create 与 FileField 和 upload_to 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49699612/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com