Как загрузить изображение и создать представление - PullRequest
0 голосов
/ 07 декабря 2018

Я не понимаю, как добавить этот объект изображения на вид.Пожалуйста, помогите мне.

модели

from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
from django.urls import reverse



class Post(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()

    image = models.ImageField(default='post.jpg', upload_to='image')

    date_posted = models.DateTimeField(default=timezone.now)
    author = models.ForeignKey(User, on_delete=models.CASCADE)

    def __str__(self):
        return self.title

    def save(self, *args, **kwargs):
        super().save()


    def get_absolute_url(self):
        return reverse('post-detail', kwargs={'pk': self.pk})

То, что я делаю для поля изображения, является действительным.Я хочу иметь возможность загружать файл изображения, используя CreateView и LoginRequiredMixin, но не могу заставить его работать - кажется, форма не связывает никакие данные файла после выбора файла.Вот текущее содержание представления

просмотров

 class PostCreateView(LoginRequiredMixin, CreateView):
       model = Post
       fields = ['title', 'content','image']

       def form_valid(self, form):
           form.instance.author = self.request.user

           return super().form_valid(form)

Любое мнение, что я только что показал фотографию по умолчанию.Я не понимаю, как справиться с этим. Я стараюсь изо всех сил, я думаю.

post_form.html

 {% extends "blog/base.html" %}
 {% load crispy_forms_tags %}
 {% block content %}
   <div class="content-section">
    <form method="POST">
        {% csrf_token %}
        <fieldset class="form-group">
            <legend class="border-bottom mb-4">Blog Post</legend>
            {{ form|crispy }}
        </fieldset>
        <div class="form-group">
            <button class="btn btn-outline-info" 
        type="submit">Post</button>
        </div>
       </form>
    </div>
   {% endblock content %}

home.html

  {% extends "blog/base.html" %}
  {% block content %}
     {% for post in posts %}
       <article class="media content-section">
      <img class="rounded-circle article-img" src="{{ 
       post.author.profile.image.url }}">
      <div class="media-body">
        <div class="article-metadata">
          <a class="mr-2" href="#">{{ post.author }}</a>
          <small class="text-muted">{{ post.date_posted|date:"F d, Y" }} 
          </small>
        </div>
        <h2><a class="article-title" href="{% url 'post-detail' post.id %}"> 
         {{ post.title }}</a></h2>
        <p class="article-content">{{ post.content }}</p>
        <img class="rounded-circle account-img" src="{{ post.image.url }}">
      </div>
     </article>
     {% endfor %}
   {% endblock content %}

командная строка

OSError: [WinError 123] The filename, directory name, or volume label syntax 
is incorrect: 'C:\\Users\\Arvan\\Desktop\\django_project\\medi
a\\<MultiValueDict: {}>'
[07/Dec/2018 04:04:39] "GET /media/%3CMultiValueDict%3A%20%7B%7D%3E HTTP/1.1" 
500 80871

1 Ответ

0 голосов
/ 07 декабря 2018

Вместо вашего текущего метода form_valid в вашем представлении попробуйте:

def form_valid(self, form):
    post = form.save(commit=False)
    post.save()
    return HttpResponseRedirect(reverse('redirect'))

и в вашем шаблоне убедитесь, что ваша форма имеет следующее:

<form method="post" enctype="multipart/form-data">

ключ, являющийся энтипом для отправкифайлы.

...