2016-10-21 5 views
1

私のDjangoアプリケーションでは、ユーザがフォームに入力してファイルをアップロードします。私は複数のdbエントリを作成する必要がありますが、それらはすべて同じファイルを参照する必要があります。つまり、作成する必要があるオブジェクトが10個ある場合、アップロードしたファイルをストレージバックエンドに10回保存したくありません。私は一度ファイルを保存したい、そして、それぞれのdbエントリーは同じファイルを参照すべきです。Djangoの複数のデータベースエントリに同じファイルを保存

以下

は、私が現在持っているものであるが、それは、ファイルを作成し、複数回

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

これは私が思いついたものです。手動でファイルを保存しているので、このアプローチには何か欠点があるのだろうか?

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) 
関連する問題