如何使用Django表单存储图像?
我是Django的新手。我已经被困了一段时间了。我相信一切都正确配置了。但是,当创建我的对象时,它不会创建媒体目录或存储文件/图像。我已经完成了设置文件,URL,视图,模型,形成所有内容。
这是相关文件:
// setting.py
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
// models.py
class Trip(models.Model):
city = models.CharField(max_length= 255)
country = models.CharField(max_length= 255)
description = models.CharField(max_length= 255)
creator = models.ForeignKey(User, related_name = 'trips_uploaded',on_delete= CASCADE, null=True)
favoriter = models.ManyToManyField(User, related_name= 'fav_trips')
photo = models.ImageField(null=True, blank =True, upload_to='trips/')
// urls.py ( there were 2 ways to write media according to tutorial)
from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('travelsiteapp.urls'))
]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
# urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
// views.py (lastly)
def tripAdd(request):
form = TripForm()
if request.method == 'POST':
form = TripForm(request.POST, request.FILES)
if form.is_valid():
form.photo = form.cleaned_data["photo"]
form.save()
context = { 'form': form}
return render(request, 'tripAdd.html', context)
// html/ form
<form action="/createTrip"method="post" enctype="multipart/form-data">
{% csrf_token %}
{{form.as_p}}
<input type="submit" value="submit">
</form>
// forms.py
from django import forms
from django.forms import ModelForm
from .models import Trip
from django import forms
class TripForm(ModelForm):
class Meta:
model = Trip
fields = ['city', 'country', 'description', 'photo']
// I have hit all the steps not sure whats wrong? & and installed pip pillow
I'm new to django. I've been stuck for a while. I believe everything is configured correctly. However, when my objects are created it is not creating the media directory or storing the files/images. I have done the settings file, urls, views, models, forms everything.
Here are relevant files:
// setting.py
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
// models.py
class Trip(models.Model):
city = models.CharField(max_length= 255)
country = models.CharField(max_length= 255)
description = models.CharField(max_length= 255)
creator = models.ForeignKey(User, related_name = 'trips_uploaded',on_delete= CASCADE, null=True)
favoriter = models.ManyToManyField(User, related_name= 'fav_trips')
photo = models.ImageField(null=True, blank =True, upload_to='trips/')
// urls.py ( there were 2 ways to write media according to tutorial)
from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('travelsiteapp.urls'))
]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
# urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
// views.py (lastly)
def tripAdd(request):
form = TripForm()
if request.method == 'POST':
form = TripForm(request.POST, request.FILES)
if form.is_valid():
form.photo = form.cleaned_data["photo"]
form.save()
context = { 'form': form}
return render(request, 'tripAdd.html', context)
// html/ form
<form action="/createTrip"method="post" enctype="multipart/form-data">
{% csrf_token %}
{{form.as_p}}
<input type="submit" value="submit">
</form>
// forms.py
from django import forms
from django.forms import ModelForm
from .models import Trip
from django import forms
class TripForm(ModelForm):
class Meta:
model = Trip
fields = ['city', 'country', 'description', 'photo']
// I have hit all the steps not sure whats wrong? & and installed pip pillow
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
哪个URL服务
tripadd()
视图?如果它是/createTrip
,如您的表单中,请在这样的操作中添加一个trailling slash:/createTrip/
。当您发布到URL时,Django默认情况下会拖延斜线。您可以自定义如果您愿意的话。另外,不要忘记声明此URL(因为它不是您提供的示例)。Which url is serving the
tripAdd()
view? If it is/createTrip
as in your form, then add a trailling slash in the action like this:/createTrip/
. When you post to an URL, Django expects a trailing slash by default. You can customize that behavior if you like. Also, don't forget to declare this URL (since it is not in the example you provided).