Django Python: Загрузка изображений не работает не работает
Я работаю над сайтом социальной сети, базовый код взят из проекта с открытым исходным кодом на GitHub. В базовом проекте вы можете размещать только текст.
Я искал в интернете и нашел инструкцию по реализации img upload.
Но это не работает, потому что я получаю много кодов ошибок.
Код ошибки:
AttributeError: module 'django.forms' has no attribute 'Post'
Мой код: forms.py
from django import forms
from django.forms import fields
from .models import Post, Comment
class Post(forms.Post):
class Meta:
model = Post
fields = ['name', 'Main_Img']
posts.py
""" Home page with all posts """
def first(request):
context = {
'posts':Post.objects.all()
}
return render(request, 'blog/first.html', context)
""" Posts of following user profiles """
@login_required
def posts_of_following_profiles(request):
profile = Profile.objects.get(user = request.user)
users = [user for user in profile.following.all()]
posts = []
qs = None
for u in users:
p = Profile.objects.get(user=u)
p_posts = p.user.post_set.all()
posts.append(p_posts)
my_posts = profile.profile_posts()
posts.append(my_posts)
if len(posts)>0:
qs = sorted(chain(*posts), reverse=True, key=lambda obj:obj.date_posted)
paginator = Paginator(qs, 50)
page = request.GET.get('page')
try:
posts_list = paginator.page(page)
except PageNotAnInteger:
posts_list = paginator.page(1)
except EmptyPage:
posts_list = paginator.page(paginator.num_pages)
return render(request,'blog/feeds.html',{'profile':profile,'posts':posts_list})
urls.py
urlpatterns = [...]
if settings.DEBUG:
urlpatterns += static (settings.MEDIA_URL,
document_root = settings.MEDIA_ROOT)
models.py
""" Post model """
class Post(models.Model):
title = models.CharField(max_length=150)
content = RichTextField(blank=True, null=True)
Main_Img = models.ImageField(upload_to='media/images/')
date_posted = models.DateTimeField(default=timezone.now)
date_updated = models.DateTimeField(auto_now=True)
author = models.ForeignKey(User, on_delete=models.CASCADE)
likes = models.ManyToManyField(User, related_name="blogpost", blank=True)
saves = models.ManyToManyField(User, related_name="blogsave", blank=True)
def total_likes(self):
return self.likes.count()
def total_saves(self):
return self.saves.count()
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('post-detail', kwargs={"pk":self.pk})
post_form.py
<div class="m-auto w-100 container">
<div class="content-section">
<form method = "post" enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Upload</button>
</form>
</div>
</div>
Вот сайт, с которого я взял код для загрузки изображений: https://de.acervolima.com/python-bilder-in-django-hochladen
У меня есть вопросы, чтобы реализовать их стенд.
Моя проблема заключается в том, чтобы синхронизировать код с сайта с уже существующим кодом.
from django import forms # <----------------------- module 'django.forms'
from django.forms import fields
from .models import Post, Comment
class Post(forms.Post): # <----------------------- has no attribute 'Post'
# ...
AttributeError: модуль 'django.forms' не имеет атрибута 'Post'
Сообщение об ошибке вполне объяснимо: вы пытаетесь наследовать от класса с именем Post
из django.forms
, но в Post
.django.forms
нет класса
Проблема в том, что в модуле Post
нет класса с именем django.forms
.
Я не уверен, на какой пример вы ссылаетесь, так как https://de.acervolima.com/python-bilder-in-django-hochladen возвращает 404 not found, но я предполагаю, что вы заменили имя какого-то класса в примере.
В Django загрузка файлов может быть реализована с помощью FileField
в django.forms
Эти документы могут помочь.
https://docs.djangoproject.com/en/4.0/topics/http/file-uploads/ https://docs.djangoproject.com/en/4.0/ref/forms/api/#binding-uploaded-files