2017-02-12 9 views
0

私はイベントフォームを使用して、ユーザーがイベントモデルを編集できるようにしています。 私のモデルでは、私はフォームは「静的」にアップロードする必要がある場合、画像を「メディア」フォルダにアップロードします

class Event(models.Model): 
    image = models.ImageField(upload_to='event_image') 

upload_toディレクトリを指定したと私は同じ場所にアップロードするモデルにリンクされているが、それがメディアにアップロードされたフォーム期待していた - 私が得たファイル名をfrom obj.image.urlは 'media/filename'です。ここに私の形式は次のとおりです。

class EventForm(forms.ModelForm): 
    image = forms.ImageField(label="Event Image", required=True) 

    class Meta: 
     model = Event 

views.py:ここ

def edit_event(request, event_id): 
    if request.method == 'POST': 
     edited_event = Event.objects.get(id=event_id) 
     form = EventForm(request.POST, request.FILES, instance=edited_event) 

     if form.is_valid(): 
      data = form.cleaned_data 
      cat = Category.objects.get(name=data["category_str"]) 

      Event.objects.filter(id=event_id).update(name=data["name"],description=data["description"],address=data["address"], 
                volunteerLimit=data["volunteerLimit"],category=cat,minimumAge=data["minimumAge"], 
                image=data["image"], date=data['date']) 
    return render(request, 'handsup/index.html') 

は、メディアやスタティックルートのための私の設定です:

STATIC_URL = '/static/' 
STATIC_DIR = os.path.join(BASE_DIR, 'static') 
STATICFILES_DIRS = [STATIC_DIR, ] 

MEDIA_DIR = os.path.join(BASE_DIR, 'media') 
MEDIA_ROOT = MEDIA_DIR 
MEDIA_URL = '/media/' 

モデルの画像のすべてがメディア」にアップロードされています/ event_image 'になりますが、変更されたイメージは' media/filename 'にアップロードされますが、そのディレクトリには存在しません。この問題を解決する最良の方法は何ですか? ありがとうございます。

答えて

1

あなたは次のことを言うとき、私は混乱している:

私は同じ場所を するためにそれをアップロードするモデルにリンクされているフォームを期待していました。

あなたはそのImageFieldと直接あなたのモデルのインスタンスを保存する場合は、あなたが保存したファイルは、あなたのMEDIA_ROOTで終わる必要があります。

DjangoのFileFieldは、デフォルトではどのように動作するのですか。STATIC_ROOTには送信されません。

スタティックファイルは、ユーザーがアップロードしたものではなく、サイトコンテンツに対して明示的に使用されます。

STATIC_ROOTMEDIA_ROOTは異なる目的を果たし、Djangoの設定チェッカーでエラーが発生するため、同じディレクトリに設定することさえできません。 Here's that error in the code:なぜあなたはstaticfilesを保存するために使用するモデルを作成している:

if ((settings.MEDIA_ROOT and settings.STATIC_ROOT) and 
      (settings.MEDIA_ROOT == settings.STATIC_ROOT)): 
     raise ImproperlyConfigured("The MEDIA_ROOT and STATIC_ROOT " 
            "settings must have different values") 

私はより良い質問があると思いますか?

+0

ありがとうございます。私自身の間違い。私は私の質問を変更します。問題はイメージを 'media/event_image/filename'にアップロードする必要がありますが、そこにアップロードされていないため、object.image.urlは存在しない 'media/filename'です。 – matchifang

+0

Ah。私はその場合どのくらいの助けが得られるか分かりません。ただし、ファイルが 'media/event_image/filename'にアップロードされておらず、' object.image.url == media/filename'というファイルが "存在しない"と言うと、それは混乱します。画像はどちらの場所にもありません。それはどこに行きましたか?それはまったくアップロードされていますか? – erewok

関連する問題