Я хочу загрузить изображение в базу данных, используя форму по умолчанию в django, но изображение не загружено. Оно показывает «Файл не выбран» - PullRequest
1 голос
/ 21 января 2020

forms.py

from django import forms
from .models import Posts


class PostForm(forms.ModelForm):
    class Meta:
        model = Posts
        fields = ['topic','post','thumbnail','author']

models.py

class Posts(models.Model):
topic = models.ForeignKey(Topic,on_delete=models.CASCADE)
post = models.TextField()
date = models.DateTimeField(auto_now_add=True)
author = models.ForeignKey(Author,on_delete=models.CASCADE)
thumbnail = models.ImageField()

def __str__(self):
    return f"{self.post[:20]}..."

class Meta:
    verbose_name_plural = 'posts'

views.py

def add_post(request):
if request.method == 'POST':
    form = PostForm(data=request.POST)
    if form.is_valid():
        form.save()
        return redirect("/")
else:
    form=PostForm()
context = {'form':form}
return render(request,'blog/add_post.html',context)

add_post. html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <form action="{% url 'blog:add_post' %}" method='post'>
    {% csrf_token %}
    {{form.as_p}}

    <input type='submit'>
    </form>
</body>
</html>

, когда я пытаюсь отправить форму, в поле миниатюр автоматически отображается «файл не выбран», даже когда я выбрал file.so, пожалуйста, помогите мне решить эту проблему !!! когда я пытаюсь отправить сообщение, оно показывает "Файл не выбран", даже когда я выбрал

Ответы [ 2 ]

2 голосов
/ 21 января 2020

Вы должны добавить upload_to:

    item_image = models.ImageField(
        blank = True,
        null = True,
        upload_to = 'item/image/',
        db_column = 'ITEM_IMAGE',
        verbose_name = 'IMAGE',
    )

Не забудьте назначить путь для медиафайлов: (on settings.py)

MEDIA_URL = '/media/' 
MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 

In forms.py:

    item_image = forms.ImageField(
        required = False,
        label = 'Image',
        widget = forms.ClearableFileInput(
            attrs = {'class': 'form-control mb-2', 'placeholder': 
        'IMAGE',}
        ),
    )

Вот мой github с django проектом, который поможет вам:

Github / Django

0 голосов
/ 21 января 2020

Вам необходимо добавить enctype="multipart/form-data" к вашей html форме:

 <form action="{% url 'blog:add_post' %}" method='post' enctype="multipart/form-data">
    {% csrf_token %}
    {{form.as_p}}

    <input type='submit'>
</form>

и передать request.FILES к вашей форме:

def add_post(request):
  if request.method == 'POST':
      form = PostForm(request.POST, request.FILES)
      if form.is_valid():
          form.save()
          return redirect("/")
  else:
      form=PostForm()
  context = {'form':form}
  return render(request,'blog/add_post.html',context)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...