Применение стороннего скрипта к изображению и сохранение его в базу

Пишу небольшой проект на 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("/")
→ Ссылка