将相同的文件保存到Django中的多个db条目

时间:2016-10-21 11:09:41

标签: django

在我的Django应用程序中,用户填写表单并上传文件。我需要创建多个db条目,但它们都应该引用相同的文件。换句话说,如果需要创建10个对象,我不想将上传的文件保存10次到我的存储后端。我想保存文件一次,然后每个db条目应该引用相同的文件。

以下是我目前所拥有的,但它会多次创建文件

class MyModel(models.Model):
    price = models.FloatField()
    my_file = models.FileField()


class BatchTradeForm(forms.Form):
    price = forms.FloatField()
    my_file = forms.FileField()

    def create(self):
        new_items = []
        for x in range(10):
            entry = MyModel(**self.cleaned_data)
            new_items.append(entry)
        MyModel.objects.bulk_create(new_items)

class MyView(FormView):
    def form_valid(self, form):
        form.create()

我猜我需要首先手动将文件保存到我的存储后端,然后保存参考文件,但是我确定必须有一种更简单的方法来实现这个目标吗?

1 个答案:

答案 0 :(得分:0)

这就是我想出来的。想知道这种方法是否有任何缺点,因为我先手动保存文件?

my_file = self.cleaned_data.pop('my_file', None)
if my_file:
    p = "path/to/{0}".format(my_file.name)
    path = default_storage.save(p, my_file)

new_items = []
for x in range(10):
    entry = MyModel(**self.cleaned_data)
    if my_file:
        entry.my_file = path
    new_items.append(entry)
MyModel.objects.bulk_create(new_items)