/ /「写真」フォームをフォームに追加して、ユーザーが写真を追加できるようにします-django、django-forms、django-models

「Photo」フォームをフォームに追加して、ユーザーが写真を追加できるようにします-django、django-forms、django-models

すべてのユーザーが写真を追加できるように、フォームにImageformを追加したいと思います。 私はこれを読んだ https://docs.djangoproject.com/en/dev/ref/forms/fields/#imagefield この https://docs.djangoproject.com/en/dev/ref/forms/api/#binding-uploaded-files

それでもそれを達成する方法について混乱しています。ユーザーが自分のフォルダから写真を追加できるようにコードを変更するにはどうすればよいですか?ここに私のコードと、作成したい理想的なフォームを添付しました。

【私の理想形】

私の理想の形

models.py

from django.db import models
from django.forms import ModelForm

class Sell(models.Model):
subject = models.CharField(max_length=100)
price = models.CharField(max_length=100)
condition = models.CharField(max_length=100)
photo = models.ImageField(upload_to="media")
email = models.EmailField()
body = models.CharField(max_length=200)

forms.py

from django.forms import ModelForm
from uasite1.models import Sell

class SellForm(ModelForm):
class Meta:
model = Sell

views.py

from django.shortcuts import render_to_response,get_object_or_404
from django.http import HttpResponseRedirect
from uasite1.forms import SellForm
from uasite1.models import Sell
from django.template import RequestContext

def sell_create(request):
context = {}
if request.method == "POST":
form = SellForm(request.POST)
if form.is_valid():
new_sell = form.save()
return HttpResponseRedirect("/sechand/%d/" % new_sell.pk)
else:
form = SellForm()
context["form"] = form
return render_to_response("sell.html",context,context_instance = RequestContext(request))

sell.html

{% extends "base.html" %}
{% block extrahead %}
{% endblock %}
{% block content %}

<form enctype="multipart/form-data" action = "/sechand/" method = "post">
{% csrf_token %}
{{ form.as_p }}

<input type = "submit" value="Submit" />
</form>

{% endblock%}

sell_display.html(これは、送信された情報が表示されるテンプレートです。)

{% extends "base.html" %}
{% block content %}
<div id = "sell">

<h3> Product Name : [ {{ sell.subject }}]</h3>
<p>Photo{{ sell.photo }}</p>
<p>Price: [ {{ sell.price }} ]</p>
<p>Condition: [ {{ sell.condition }} ]</p>
<p>Comments: [ {{sell.body}} ]</p>
<p>Contact Email:[ {{ sell.email }} ]</p>
</div>
{% endblock %}

urls.py

from django.conf.urls import patterns, include, url
from django.conf.urls.static import static
from django.conf import settings
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns("",
url(r"^sechand/$","uasite1.views.sell_create"),
url(r"^sechand/(?P<pk>d+)/$", "uasite1.views.sell_detail"),
url(r"^products/electronics/$", "uasite1.views.Electronics"),
url(r"^products/$", "uasite1.views.ProductsAll"),
url(r"^admin/", include(admin.site.urls)),
)+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

回答:

回答№1は0

コード全体を調べたわけではありませんが、1つの重要な間違いに気づくことができます。ビューには次のものが含まれているはずです。

form = SellForm(request.POST, request.FILES)

また、この行:

<p>Photo{{ sell.photo }}</p>

写真を表示する方法ではないと思います。写真へのリンクを追加します。

<p>Photo{{ sell.photo.url }}</p>

そして最後に、開発環境ではメディアファイルを提供したい場合があるので、次の行をメインのurls.pyファイルに追加します。

from django.conf.urls.static import static
from django.conf import settings

urlpatterns = patterns("",
# your url patterns in here

)+ static(settings.MEDIA_URL、document_root = settings.MEDIA_ROOT)

編集:

メディアファイルの提供。そのリンクはあなたに良い概要を与えるはずです、それは私が知っている混乱を招くので、私があなたのプロジェクトで行うのと同じようにあなたに例を挙げようと思います。最初に私がsettings.pyでそれを行う方法:

#settings.py
from os.path import dirname, join, realpath
# have in mind that I have settings.py under project_root/project/settings.py
# so you probably want to check your path to your project root folder first
ROOT_DIR = realpath(join(dirname(__file__), ".."))
MEDIA_ROOT = realpath(join(ROOT_DIR, "media"))
MEDIA_URL = "/media/"
STATIC_URL = "/static/"
STATICFILES_DIRS = (
join(ROOT_DIR, "static"),
)

それが私のやり方ですが、多くの方法が機能することもあります。より良い手がかりを与えるために、私のフォルダは次のようになります。

project_root/
media/
static/
project/
settings.py