2016-05-17 6 views
0

で複数の画像をアップロードする:ジャンゴ - 私は、このような問題のあなたの助けを必要とする時

これは私のmodels.pyです:

class Location(models.Model): 
    user = models.ForeignKey(settings.AUTH_USER_MODEL, default=1) 
    name = models.CharField(max_length=100, verbose_name="Локация", default=u'') 
    photos = models.ImageField(upload_to='photos', null=True) 

これは私のforms.pyです:

class LocationForm(forms.ModelForm): 

    class Meta: 
     model = Location 
     fields = ['name', 'photos'] 

これは私のviews.pyです:

class AddLocationPageView(FormView): 
    template_name = 'add_location.html' 
    form_class = LocationForm 

    def form_valid(self, form): 
     form.save() 
     return super(AddLocationPageView, self).form_valid(form) 

そのときに複数の写真をアップロードする必要があります。 どうすればいいですか? ありがとう!

+1

[formsets](https://docs.djangoproject.com/en/1.9/topics/forms/modelforms/#django.forms.models.BaseModelFormSet)について学ぶ必要があります。 –

答えて

1

私はあなたがリレーショナルデータベースを使用していると仮定しているので、モデルのフィールド名は「写真」ですので、場所ごとに複数の写真が必要になります。

あなたのような何かを行うことができます。

class Image(models.Model): 
    full_size = models.ImageField() 
    thumbnail = models.ImageField() 
    location = models.ForeignKey('app_label.Location', related_name='photos') 

をし、場所モデルから画像フィールドを削除します。

複数の写真をアップロードするには、formsetを使用します。必要なインターフェイスに応じて、model formsetを使用して、写真のlocation_idが適切に設定されるようにします。

あなたのフォームでは、あなたのビュー(おそらくget_context_data)で呼び出すことができるformset_factory関数を使うだけです。

あなたのビューでフォームセットを扱うには、いくつかの論理的な論争が伴いますが、django-extra-viewsというプロジェクトがあります。ここでは、フォームセットロジックを使用してフォームを実装しています。

写真を既存の場所に追加したい場合は、はるかに簡単です。model_formsetを場所オブジェクトとともに指定するだけです。

関連する問題