在我的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()
我猜我需要首先手动将文件保存到我的存储后端,然后保存参考文件,但是我确定必须有一种更简单的方法来实现这个目标吗?
答案 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)