#python #django
#python #django
Вопрос:
У меня есть модель под названием Post. Данные в Post отображаются для каждого пользователя, в то время как я хочу, чтобы это было специфично для пользователя.
Я новичок в Django. Это приложение создано по учебному пособию Django для девочек. Позже я добавил поддержку регистрации пользователей.
models.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 %}
Ответ №1:
Измените свой фильтр на фильтр по пользователю, а также published_date:
posts = Post.objects.filter(
published_date__lte=timezone.now(),
author=request.user
).order_by('published_date')
Ответ №2:
В вашем представлении класса / функции проверьте, аутентифицирован ли пользователь.
if not request.user.is_superuser:
raise Http404