Передача переменной класса из Models.py в другой файл .py для обработки - PullRequest
1 голос
/ 22 мая 2019

Примечание: я начинающий в django / python

В настоящее время у меня есть класс User в models.py, который позволяет пользователю загружать изображение в мое приложение. Это поддерживается формой и шаблоном, которые позволяют загружать. Эта часть работает нормально. Проблема в том, что я получаю изображение в файловом поле в модели, но мне нужно поместить это изображение в мой файл EnhanceImage.py. Оказавшись там, я могу обработать его с помощью кода в этом сценарии, чтобы создать улучшенную версию с подушкой.

Как мне установить это иначе, чем то, что я делаю сейчас? Моя цель - получить переменную image из класса User в файл EnhanceImage.py, который будет использоваться для улучшения. Я хочу получить его в переменную UserUploadedImage в файле EnhanceImage.py

Я пробовал практически все решения, которые я могу найти в Интернете, чтобы передать переменную в новый файл.

Models.py

from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
from stdimage.models import StdImageField


class User(models.Model):
    name = models.CharField(max_length=100)
    content = models.CharField(max_length=50, default='something')
    email = models.EmailField(blank=True)
    password = models.CharField(max_length=50)
    image = StdImageField(upload_to='images/', variations={'thumbnail': {'width': 640, 'height': 480}}, default='default.jpg')

    def __str__(self):
        return self.name

ImageEnhance.py

Цель этого файла - взять UserUploadedImage и наложить контент, используя подушку.

from PIL import Image, ImageEnhance, ImageFont, ImageDraw

UserUploadedImage = I need the user uploaded image here!

foreground = Image.open("path/to/Image_to_overlay.jpg")

draw = ImageDraw.Draw(UserUploadedImage)

draw.rectangle([(-11, 420), (640, 515)], fill=(255,255,255), outline=(0,0,0))

UserUploadedImage.paste(foreground, (300, 385), foreground)
...
#more code below that isn't important for my question

Forms.py

from django.forms import ModelForm
from django import forms
from .models import User

class UserForm(forms.ModelForm):

    class Meta:
        model = User
        fields = ['name', 'email', 'content', 'image']

Views.py

from django.shortcuts import render, redirect
from django.http import HttpResponse
from .models import User
from django.views.generic import ListView, CreateView # new
from django.urls import reverse_lazy #new
from .forms import UserForm # new


def home(request):
    context = {
        'users': User.objects.all()
    }
    return render(request, 'main/home.html', context)


class CreateUploadView(CreateView): # new
    model = User
    form_class = UserForm
    template_name = 'main/photoupload.html'
    success_url = reverse_lazy('home')
...