在此处创建模型。
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'
添加了您要求的视图,我想知道如何更改它获得预期的结果,我还想了解您如何自定义用户表单和图片上传
答案 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
最后使用模板中的特定过滤帖子呈现模板。