Когда я делаю запись и нажимаю кнопку "PUBLISH BUTTON", появляется ошибка "Blog" Object is not iterable error

Я пробовал много способов, используя фильтр, так как пытался получить один объект, но он все еще не работает. Когда я создаю пост из моего раздела администратора, все работает нормально, но когда я создаю пост из моего фронтэнда с помощью формы, он создает посты, а затем показывает мне, что объект не является итерабельным "NOTE: the posts get created perfect well", но я получаю ошибку итерабельности, а также slug не заполняется автоматически во фронтэнде, как это происходит в бэкэнде в разделе администратора. Любая помощь была бы очень полезна и ускорила бы мою работу. Позвольте мне показать некоторые из моих кодов

views.py

#this is for allowing user to create a new post from the frontend
def blogpost(request):
    if request.method == "POST":
        form = BlogPostForm(request.POST, request.FILES)
        if form.is_valid():
            form = form.save(commit=False)
            form.creator = request.user
            form.save()
            messages.success(request, f'Hi, Your Post have been sent for review and would be live soon!')
    else:
        form = BlogPostForm()

    context = {
        "form": form
    }
    return render(request, 'blog/AddPost.html', context)

            
#this is for listing all the blog posts
def BlogList(request):
    posts = Blog.objects.filter(status='published').order_by('-created').values()
    categoriess = Category.objects.all()

    context = {
        'posts': posts,
        'categories': categoriess,
    }
    return render(request, 'blog/bloghome.html', context)

# This is view for blog details
def BlogDetail(request, blog_slug):
    post = get_object_or_404(Blog, slug=blog_slug)
    # post = Blog.objects.filter(slug=blog_slug)
    categories = Category.objects.all()
    comments = post.comments.filter(active=True)
    new_comment = None
    if request.method == "POST":
        comment_form = CommentForm(request.POST)
        if comment_form.is_valid():
            new_comment = comment_form.save(commit=False)
            new_comment.post = post
            new_comment.name = request.user
            new_comment.save()
    else:
        comment_form = CommentForm()

forms.py

class BlogPostForm(forms.ModelForm):

    class Meta:
        model = Blog
        fields = ['title', 'slug', 'content', 'image', 'category', 'tags']

models.py

class Blog(models.Model):
    title = models.CharField(max_length=10000, null=True, blank=True, verbose_name="Title")
    content = models.TextField(verbose_name="Post Content")
    slug = models.SlugField(unique=True)
    image = models.ImageField(upload_to="blog-images/%Y/%m/%d/", verbose_name="Post Thumbnail")
    category = models.ForeignKey(Category, on_delete=models.DO_NOTHING, verbose_name="Category", null=True)
    tags = models.ManyToManyField(Tag, related_name='tags', verbose_name="Tag", null=True)
    status = models.CharField(choices=STATUS_CHOICE, default="published", max_length=150, verbose_name='Status')
    creator = models.ForeignKey(User, on_delete=models.DO_NOTHING, verbose_name="Creator", null=True)
    created = models.DateTimeField(auto_now_add=True ,verbose_name="Created", null=True)

    def get_absolute_url(self):
        return reverse('blog:blog-details', args=[self.slug])
    
    class Meta:
        verbose_name = "Blog Post"
        verbose_name_plural = "Blog Posts"
    
    def __str__(self):
        return self.title

urls.py

urlpatterns = [
    path('', views.BlogList, name="home"),
    path('post/<slug:blog_slug>', views.BlogDetail, name="blog-details"),
    path('post/categories/<slug:category_slug>', views.category, name="category"),
    path('post/tags/<slug:tag_slug>', views.tag, name="tags"),

    path('post/create/', views.blogpost, name="add-post"),

Было бы полезно увидеть код вашего шаблона, но вот несколько проблем, которые я вижу.

Во-первых, ваше представление blogpost. Когда вы выполняете POST-запрос, после сохранения формы и установки сообщения об успехе, перенаправляйтесь в представление BlogDetail. Как вы закодировали, после сохранения формы снова будет отображаться представление blogpost, на этот раз с формой, содержащей данные POST-запроса. Посмотрите redirect здесь.

Во-вторых, в вашем представлении BlogList вы вызываете .values() на вашем posts queryset. Не видя кода вашего шаблона, я не могу сказать, намеренно ли это, но убедитесь, что вы знаете, что возвращает values() из кверисета. Возможно, вы не захотите его использовать.

В-третьих, ваше представление BlogDetail ничего не возвращает, вам нужно вернуть HttpResponse, используя, например, render, как и другие ваши представления.

И последнее замечание: принято называть представления, основанные на функциях, в нижнем регистре, с _ в качестве пробела. CamelCase зарезервирован для представлений, основанных на классах.

Вернуться на верх