Джанго может открыть изображение, но не сохранив его в базе данных - PullRequest
0 голосов
/ 10 июля 2019

Я создал форму, которая будет запрашивать имя и изображение для загрузки в Django.С моей точки зрения, я использую pytesseract для чтения текста на изображении.Мне удалось успешно сохранить имя и текстовые параметры в базе данных, но само изображение не сохраняется.

`# models.py 
class Component(models.Model):
    Serial_number = models.CharField(max_length=20, primary_key='True', default = '')
    image = models.ImageField(blank=True)
    text = models.TextField(default = 'no text found')
    Good_Candidate = models.BooleanField(default=False)
    dimension1 = models.DecimalField(max_digits=8, decimal_places=2, blank=True, null=True)


#forms.py
class partForm(forms.ModelForm):
    Serial_number = forms.CharField(max_length=128)

class Meta:
    model = Component
    fields = ['Serial_number', 'image', 'text', 'dimension1']
    widgets = {'dimension1': forms.HiddenInput(), 'text':forms.HiddenInput()}

#views.py
def image_view(request):
    form = partForm(request.POST, request.FILES)

    if form.is_valid():
        # make copy of the data
        data = request.POST.copy()
        # access image data through FILES and calling the name attribute
        image_file = request.FILES.get('image')
        text_content = pytesseract.image_to_string(Image.open(image_file))
        data['text'] = text_content
        # get largest dimension
        text_list = []
        zeros = ['O', 'o']
        badChars = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R',
        'S', 'T', 'U', 'V', 'W', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l',
        'm', 'n', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'y', 'z', '—', '——', '-', '+', ':', '\'', '‘', '’', '$', ',', '¢', '/']
        decimals = ['_']
        for letter in badChars:
            text_content = text_content.replace(letter, " ")
        for letter in zeros:
            text_content = text_content.replace(letter, "0")
        for letter in decimals:
            text_content = text_content.replace(letter, ".")

        text_list = text_content.split()

        # remove all non digits from list
        new_list = []
        for i in range(0, len(text_list)):
            if text_list[i].isdigit():
                new_list.append(int(float(text_list[i])))

        data['dimension1'] = max(new_list)

        # save fields to form
        new_form = partForm(data)
        if new_form.is_valid:
            new_form.save()
        return redirect('success')

1 Ответ

0 голосов
/ 10 июля 2019

Почему бы и нет?

if form.is_valid():
     image_file = request.FILES['image']
    #the stuff to get text
     x = Component(text=text, image=image_file)
     x.save()

Я что-то упустил?

...