如何使用Django表单存储图像?

发布于 2025-02-05 14:23:27 字数 2004 浏览 1 评论 0原文

我是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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

百变从容 2025-02-12 14:23:28

哪个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).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文