Как сохранить строковую переменную из представлений в Django - PullRequest
0 голосов
/ 04 июля 2019

Я пытаюсь использовать pytesseract для моего приложения Django.В views.py я вызвал pytesseract и сохранил весь найденный текст в переменной text_content.Я хочу сохранить эту переменную в качестве параметра 'text' для моей модели, но я не уверен, как это сделать.

Я пытался использовать .save (), но получил эту ошибку:

У объекта 'str' нет атрибута 'save'

Здесьviews.py

def image_view(request):
    if request.method == 'POST':
        form = partForm(request.POST, request.FILES)

        if form.is_valid():
            form.save()
            data = request.POST.copy() 
            image_file = request.FILES.get('image')
            text_content = pytesseract.image_to_string(Image.open(image_file))
            text_content.save()
            return redirect('success')
    else:
        form = partForm()
    return render(request, 'add_image.html', {'form' : form})

Вот модели.py

class Component(models.Model):
    snum = models.CharField(max_length=20, default = '')
    image = models.ImageField(blank=True)
    text = models.TextField(default = 'no text found')

Вот формы.

1 Ответ

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

Произошла ошибка из-за этой строки.text_content.save()

Вы пытаетесь вызвать функцию сохранения для строкового объекта.

Теперь, чтобы решить вашу проблему, есть два способа сделать это.Один из них - манипулирование данными запроса и отправка их в форму, другой - использование метода сохранения вашей модели.

Способ 1: в вашем текущем представлении

if form.is_valid():
    data = request.POST.copy()
    image_file = request.FILES.get('image')
    text_content = pytesseract.image_to_string(Image.open(image_file))
    data['relevant_field_name'] = text_content
    new_form = partForm(data) 
    if new_form.is_valid():
        new_form.save() 
return redirect('success')

Способ 2: в models.py, добавьте это в Component

def save(self, *args, **kwargs):
    if getattr(self, 'image'): 
          image_file = self.image
          self.relevant_field_name = pytesseract.image_to_string(Image.open(image_file))
    super(Component, self).save(*args, **kwargs)
...