首页 > 解决方案 > 模型不是用户特定的

问题描述

我有一个名为 Post 的模型。Post 中的数据会显示给每个用户,而我希望这是特定于用户的。

我是 Django 的新手。这个应用程序是按照 Django for Girls 教程创建的。我后来添加了对用户注册的支持。

模型.py:

from django.conf import settings
from django.db import models
from django.utils import timezone


class Post(models.Model):
    author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    title = models.CharField(max_length=200)
    text = models.TextField()
    created_date = models.DateTimeField(default=timezone.now)
    published_date = models.DateTimeField(blank=True, null=True)

    def publish(self):
        self.published_date = timezone.now()
        self.save()

    def __str__(self):
        return self.title

来自views.py的例子:

from django.shortcuts import render, get_object_or_404
from django.utils import timezone
from .models import Post
from .forms import PostForm
from django.contrib.auth.forms import UserCreationForm
from django.shortcuts import redirect
from django.contrib.auth.decorators import login_required
from django.contrib.auth import login, authenticate

@login_required
def post_list(request):
    posts = Post.objects.filter(published_date__lte=timezone.now()).order_by('published_date')
    return render(request, 'blog/post_list.html', {'posts': posts})

模板中的示例(post_list.html):

    {% for post in posts %}
        <div class="post">
            <div class="date">
                <p>published: {{ post.published_date }}</p>
            </div>
            <h1><a href="{% url 'post_detail' pk=post.pk %}">{{ post.title }}</a></h1>
            <p>{{ post.text|linebreaksbr }}</p>
        </div>
    {% endfor %}

标签: pythondjango

解决方案


将您的过滤器更改为按用户和发布日期过滤:

posts = Post.objects.filter(
    published_date__lte=timezone.now(),
    author=request.user
).order_by('published_date')


推荐阅读