Я полный ноль в программировании и только пытаюсь сделать первые шаги. Я думаю, что решение моей проблемы довольно простое, но я не могу его найти.
Я хочу, чтобы в модели изображений было два поля: изображение и обработанное_изображение.
Я я использую Django 5.1.4, Python 3.13.1, Pillow 11.1.0 и Pilgram 1.2.1
Я хочу, чтобы пользователь загрузил изображение в форму на веб-сайте. Изображение обработано программой Pilgram. И потом обработанное изображение сохранялось в поле обработанное_изображение.
Но когда я сохраняю картинку, поле обработанное_изображение в базе данных остается пустым.
Скажите, пожалуйста, в чем моя ошибка?
postcard/images/models.py
from django.db import models
from PIL import Image
import pilgram
import os
from django.urls import reverse
from django.contrib.auth.models import User
from .services.utils import unique_slugify
class Images(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='user')
title = models.CharField('Название', max_length=255)
slug = models.SlugField("URL", max_length=255, unique=True, db_index=True)
image = models.ImageField('Изображение', upload_to="images/%Y/%m/%d/")
processed_image = models.ImageField('Отработанное изображение', upload_to="processed/%Y/%m/%d/", blank=True, null=True)
time_create = models.DateTimeField('Дата создания', auto_now_add="True")
def __str__(self):
return self.title
def save(self, *args, **kwargs):
super().save(*args, **kwargs)
if self.image:
self.process_image()
def process_image(self):
img_path = self.image.path
img = Image.open(img_path)
img = pilgram._1977(img)
processed_path = os.path.join(os.path.dirname(img_path),f"processed_{os.path.basename(img_path)}")
img.save(processed_path)
self.processed_image = processed_path
super().save(update_fields=['processed_image'])
class Meta:
verbose_name = 'Картинка'
verbose_name_plural = 'Картинки'
ordering = ['-time_create', 'title']
def get_absolute_url(self):
return reverse('image', kwargs={'image_slug': self.slug})
def save(self, *args, **kwargs):
"""
Сохранение полей модели при их отсутствии заполнения
"""
if not self.slug:
self.slug = unique_slugify(self, self.title)
super().save(*args, **kwargs)
postcard/images/views.py
from django.shortcuts import render, redirect
from django.urls import reverse_lazy
from django.views.generic import ListView, DetailView, CreateView, UpdateView, DeleteView
from .forms import ImageForm
from .models import Images
class ImagesList(ListView):
paginate_by = 20
model = Images
template_name = 'images/image_list.html'
context_object_name = 'images'
class UploadImage(CreateView):
form_class = ImageForm
template_name = 'images/upload.html'
success_url = reverse_lazy('upload_image')
def form_valid(self, form):
form.instance.user = self.request.user
return super(UploadImage, self).form_valid(form)
class ImageDone(DetailView):
model = Images
template_name = 'images/image_done.html'
slug_url_kwarg = 'image_slug'
context_object_name = 'image'
postcard/images/forms.py
from django import forms
from .models import *
class ImageForm(forms.ModelForm):
class Meta:
model = Images
fields = ['title', 'image']
postcard/images/urls.py
from django.urls import path
from .views import *
urlpatterns = [
path('upload_image', UploadImage.as_view(), name='upload_image'),
path('image//', ImageDone.as_view(), name='image'),
path('image_list', ImagesList.as_view(), name='image_list'),
]
postcard/images/admin.py
from django.contrib import admin
from .models import Images
@admin.register(Images)
class ImagesAdmin(admin.ModelAdmin):
prepopulated_fields = {'slug': ('title',)}
Подробнее здесь: https://stackoverflow.com/questions/793 ... ng-pilgram
Обработайте изображение на сайте с помощью Pilgram ⇐ Python
Программы на Python
-
Anonymous
1736425393
Anonymous
Я полный ноль в программировании и только пытаюсь сделать первые шаги. Я думаю, что решение моей проблемы довольно простое, но я не могу его найти.
Я хочу, чтобы в модели изображений было два поля: изображение и обработанное_изображение.
Я я использую Django 5.1.4, Python 3.13.1, Pillow 11.1.0 и Pilgram 1.2.1
Я хочу, чтобы пользователь загрузил изображение в форму на веб-сайте. Изображение обработано программой Pilgram. И потом обработанное изображение сохранялось в поле обработанное_изображение.
Но когда я сохраняю картинку, поле обработанное_изображение в базе данных остается пустым.
Скажите, пожалуйста, в чем моя ошибка?
postcard/images/models.py
from django.db import models
from PIL import Image
import pilgram
import os
from django.urls import reverse
from django.contrib.auth.models import User
from .services.utils import unique_slugify
class Images(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='user')
title = models.CharField('Название', max_length=255)
slug = models.SlugField("URL", max_length=255, unique=True, db_index=True)
image = models.ImageField('Изображение', upload_to="images/%Y/%m/%d/")
processed_image = models.ImageField('Отработанное изображение', upload_to="processed/%Y/%m/%d/", blank=True, null=True)
time_create = models.DateTimeField('Дата создания', auto_now_add="True")
def __str__(self):
return self.title
def save(self, *args, **kwargs):
super().save(*args, **kwargs)
if self.image:
self.process_image()
def process_image(self):
img_path = self.image.path
img = Image.open(img_path)
img = pilgram._1977(img)
processed_path = os.path.join(os.path.dirname(img_path),f"processed_{os.path.basename(img_path)}")
img.save(processed_path)
self.processed_image = processed_path
super().save(update_fields=['processed_image'])
class Meta:
verbose_name = 'Картинка'
verbose_name_plural = 'Картинки'
ordering = ['-time_create', 'title']
def get_absolute_url(self):
return reverse('image', kwargs={'image_slug': self.slug})
def save(self, *args, **kwargs):
"""
Сохранение полей модели при их отсутствии заполнения
"""
if not self.slug:
self.slug = unique_slugify(self, self.title)
super().save(*args, **kwargs)
postcard/images/views.py
from django.shortcuts import render, redirect
from django.urls import reverse_lazy
from django.views.generic import ListView, DetailView, CreateView, UpdateView, DeleteView
from .forms import ImageForm
from .models import Images
class ImagesList(ListView):
paginate_by = 20
model = Images
template_name = 'images/image_list.html'
context_object_name = 'images'
class UploadImage(CreateView):
form_class = ImageForm
template_name = 'images/upload.html'
success_url = reverse_lazy('upload_image')
def form_valid(self, form):
form.instance.user = self.request.user
return super(UploadImage, self).form_valid(form)
class ImageDone(DetailView):
model = Images
template_name = 'images/image_done.html'
slug_url_kwarg = 'image_slug'
context_object_name = 'image'
postcard/images/forms.py
from django import forms
from .models import *
class ImageForm(forms.ModelForm):
class Meta:
model = Images
fields = ['title', 'image']
postcard/images/urls.py
from django.urls import path
from .views import *
urlpatterns = [
path('upload_image', UploadImage.as_view(), name='upload_image'),
path('image//', ImageDone.as_view(), name='image'),
path('image_list', ImagesList.as_view(), name='image_list'),
]
postcard/images/admin.py
from django.contrib import admin
from .models import Images
@admin.register(Images)
class ImagesAdmin(admin.ModelAdmin):
prepopulated_fields = {'slug': ('title',)}
Подробнее здесь: [url]https://stackoverflow.com/questions/79341582/process-the-image-on-the-website-using-pilgram[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия