Django,我已经创建了一个帖子模型和一个基本的用户身份验证,对于我的索引页面,我想只显示当前用户的帖子,

时间:2018-03-23 11:27:47

标签: django-templates django-views

在此处创建模型。

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


class Post(models.Model):
    STATUS_CHOICES = (('draft', 'Draft'), ('published', 'Published'),)
    title = models.CharField(max_length=250)
    slug = models.SlugField(max_length=250, unique_for_date='publish')
    author = models.ForeignKey(User, related_name='blog_posts', on_delete=models.CASCADE)
    body = models.TextField()
    publish = models.DateTimeField(default=timezone.now)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
    status = models.CharField(max_length=10, choices=STATUS_CHOICES, default='draft')

    class Meta:
        ordering = ('-publish',)

    def __str__(self):
        return self.title


在我的HTML中

     <!-- templates/home.html -->
     {% extends 'base.html' %}

    {% block content %}

     <h1>Homepage.</h1>

    <ul>
     {% if user.is_authenticated %}
       {% for post in deeppost %}
     <li>{{post.title}}</li></a><p>{{post.body}}</p>Created by- 
    {{post.author}}

    {% endfor %}
   {% else %}
   <p>You are not logged in. Please goto the login Page by clicking on the login link above </p>

   {% endif %}
    </ul>-
     {% endblock %}

我想了解我如何只返回当前登录用户的帖子,我无法理解,因为我是django的新手和一般的编程

   from django.shortcuts import render
   from django.http import HttpResponse
   from django.views.generic import TemplateView,ListView,DetailView
   from .models import Post
   # Create your views here.

  def index(request):
       return HttpResponse("Hello, world.")


    class HomePageView(ListView):

         model = Post
      template_name = 'home.html'

def get_context_data(self, **kwargs):
    # Call the base implementation first to get a context
    context = super().get_context_data(**kwargs)
    # Add in a QuerySet of all the books
    context['deeppost'] = Post.objects.filter(author=request.user)
    return context




     class AboutPageView(TemplateView):
       template_name = 'about.html'

       class BlogListView(ListView):
      model = Post
        template_name = 'home.html'



    class BlogDetailView(DetailView):
      model = Post
      template_name = 'post_detail.html'

添加了您要求的视图,我想知道如何更改它获得预期的结果,我还想了解您如何自定义用户表单和图片上传

2 个答案:

答案 0 :(得分:0)

在view.py上,您需要过滤数据:

deeppost = Post.objects.filter(author=request.user)

PS:分享您当前的观点,以便我可以更新答案

答案 1 :(得分:0)

从你的模特

  • 它实际上会保存用户发布的所有帖子。
  • 您已为用户和帖子创建了一对多关系。
  • 所以每个用户都有很多帖子。

仅显示当前用户的帖子,您必须使用deeppost在 views.py 中构建context,现在将为当前用户过滤deeppost(下面提到的代码) ,但是您使用ClassBasedViews,因此您必须在此处覆盖get_queryset方法。

最好你可以使用基于功能的视图,如果你是Django的新手。

class PostsList(LoginRequiredMixin, ListView):
    template_name = 'posts/user_posts.html

    def get_queryset(self):
       """
       Return the list of posts created by User.
       """
       qs = Post.objects.filter(author=request.user)
       return qs

最后使用模板中的特定过滤帖子呈现模板。