Применение стороннего скрипта к изображению и сохранение его в базу
Пишу небольшой проект на django, требуется получить изображение от пользователя через форму, применить функцию из скрипта к изображению, сохранить изображение и результат в одну строку базы данных
views.py
from pic_script import res_pic #функция, которую нужно применить
from django.http import HttpResponseRedirect
from django.shortcuts import render
from .forms import DB_Form
from .models import DB_Image
def index(request):
db_image = DB_Image.objects.all()
form = DB_Form(request.POST, request.FILES)
return render(request, "index.html", context = {'form' : form, 'db_image' : db_image,})
def create(request):
if request.method == "POST":
form = DB_Form(request.POST, request.FILES,)
#где-то здесь должен быть вызов функции
form.save()
return HttpResponseRedirect("/")
models.py
from django.db import models
class DB_Image(models.Model):
image = models.ImageField(upload_to="images") #поле для сохранения изображения
text = models.TextField() #поле для сохранения результата
forms.py
from django import forms
from .models import DB_Image
class DB_Form(forms.ModelForm):
class Meta:
model = DB_Image
fields = ("image",)
Ответы (1 шт):
Автор решения: Andrey Maslov
→ Ссылка
можно вызвать в методе save твоей формы
class DB_Form(forms.ModelForm):
class Meta:
model = DB_Image
fields = ("image",)
def save(self, *args, **kwargs):
if self.instance.pk is None: # если тебе нужно что бы функция вызывалась не только при создании, а при любом сохранении, то убери это условие
self.instance.text = твоя_функция(self.instance.image)
return super().save(*args, **kwargs)
если хочешь сделать во view, тогда форму можно не трогать, а подправить твой create метод
def create(request):
if request.method == "POST":
form = DB_Form(request.POST, request.FILES,)
if form.is_valid():
db_image = form.save(commit=False)
db_image.text = твоя_функция(db_image.image)
db_image.save()
return HttpResponseRedirect("/")