URL меняется после обновления моего изображения в django

#python #django #django-models #django-views

#python #django #django-модели #django-просмотры

Вопрос:

Когда я добавляю изображение, URL-адрес изображения полностью виден, но когда я обновляю его, это половина прошлого

это мой models.py

 from django.db import models

# Create your models here.
class ImageUpload(models.Model):
    get_image = models.FileField(upload_to='gallery/new/',null=True)
 

это мой views.py

 from django.shortcuts import render,redirect
from upload.models import ImageUpload
# Create your views here.
def add_image(request):
    if request.method == "POST":
        image = request.FILES['myimage']
        save_image = ImageUpload(get_image=image)
        save_image.save()
        return redirect('/')
    else:
        image_data = ImageUpload.objects.all()
        return render(request,'add_image.html',{'image_data':image_data})

def update_image(request, id):
    if request.method == "POST":
        image = request.FILES['myimage']
        save_image = ImageUpload.objects.filter(id=id).update(get_image=image)
        return redirect('/')
    else:
        image_data = ImageUpload.objects.filter(id=id)
        return render(request,'update_image.html',{'image_data':image_data})
 

это мой urls.py

 from django.urls import path
from upload.views import add_image, update_image

app_name = 'upload'

urlpatterns = [
    path('', add_image, name="add_image"),
    path('update_image/<id>/', update_image, name="update_image"),
]
 

это мой settings.py статическая и мультимедийная конфигурация

 STATIC_URL = '/static/'

STATICFILES_DIRS = [

    BASE_DIR / "static",
]

STATIC_ROOT = BASE_DIR.parent / "static_cdn"

MEDIA_URL = '/media/'

MEDIA_ROOT =  BASE_DIR / "media"
 

это мой проект urls.py

 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('upload.urls')),
]

if settings.DEBUG:
    urlpatterns  = static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
    urlpatterns  = static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
 

это мой add_image.html

           <form action="{% url 'upload:add_image' %}" method="POST" class="col-md-8 offset-md-2 mb-5" enctype="multipart/form-data">
{% csrf_token %}
        <div class="input-group col-md-6 mb-3">
          <input type="file" class="form-control" name="myimage" id="inputGroupFile01" required>
        </div>

        <button type="submit" class="btn btn-primary">Submit</button>

      </form>
      <!-- form -->
      {% if image_data %}
<h2 class="bg-warning text-white p-3 mb-5">All Images</h2>
{% for i in image_data %}
      <div class="col-md-8 offset-md-2 my-4">
        <label class="input-group-text" for="inputGroupFile01">{{ i.get_image }}</label> <a href="{% url 'upload:update_image' i.id %}" class="btn btn-primary btn-sm float-right">Update</a><a href="{{ i.get_image.url }}" class="btn btn-success my-1 mx-3 btn-sm float-right" target="_blank">View</a>
      </div>
{% endfor %}
      {% endif %}
 

это мой update_image.html

   <!-- form -->
      {% for i in image_data %}
      <form action="{% url 'upload:update_image' i.id %}" method="post" enctype="multipart/form-data">
{% csrf_token %}
        <div class="input-group col-md-6 mb-3">
          <label class="input-group-text" for="inputGroupFile01">Upload</label>
          <input type="file" class="form-control" name="myimage" id="inputGroupFile01" required>
        </div>

        <button type="submit" class="btn btn-primary">Submit</button>

      </form>
      {% endfor %}
      <!-- form -->
 

Когда я добавляю, URL-адрес изображения выглядит следующим образом http://127.0.0.1:8000/media/gallery/new/img_2.jpg

но когда я обновляю изображение, URL-адрес меняется следующим образом http://127.0.0.1:8000/media/comming_soon.jpg

Комментарии:

1. удалось ли вам обновить экземпляр загрузки изображения? Обновился ли get_image?

2. изображение не обновляется

3. после обновления URL-адрес сохраняется в базе данных, но файл не загружается в соответствующее местоположение

4. этот URL-адрес хранится в базе данных 127.0.0.1:8000/media/comming_soon.jpg но это должно быть так 127.0.0.1:8000/media/gallery/new/comming_soon.jpg

Ответ №1:

Проблема, похоже, исходит отсюда.

 save_image = ImageUpload.objects.filter(id=id).update(get_image=image)
 

попробуйте заменить на:

 imageupload = get_object_or_404(ImageUpload, id=id)
imageupload.get_image = image
imageupload.save()
 

Комментарии:

1. когда я пробую второй, он выдает мне эту ошибку: объект ImageUpload не имеет атрибута ‘update’