Если я пытаюсь создать приложение diray, используя django, как я могу заставить его показывать разные записи в дневнике в зависимости от текущего пользователя, вошедшего в систему?

В настоящее время я занимаюсь созданием приложения дневника на django. Я создал несколько пользователей (например, пользователь A и пользователь B). Однако, когда пользователь A входит в систему, пользователь A может видеть записи пользователя B.

Как я могу заблокировать его, чтобы только пользователь B мог видеть записи пользователя B, а когда пользователь A входит в систему, пользователь A может иметь личный вид записей? (нужно ли мне создать другое представление?)

views.py для моего приложения дневника:

from django.urls import reverse_lazy
from django.views.generic import (
    ListView,
    DetailView,
    CreateView,
    UpdateView,
    DeleteView,
)
from .models import Entry
from django.contrib.auth.decorators import login_required
from django.shortcuts import render, redirect




# Create your views here.
class ELV(ListView):
    model = Entry
    queryset = Entry.objects.all().order_by("-date_created") #takes all the entries and orders it by date
    template_name = 'entries\entry_list.html'

    
class EDV(DetailView):
    model = Entry
    template_name = 'entries\entry_detail.html'
    
    

class ECV(CreateView):
    model = Entry
    fields = ["title", "content"]
    success_url = reverse_lazy("entry-list")
    template_name = 'entries\entry_form.html'
    

class EUV(UpdateView):
    model = Entry
    fields = ["title", "content"]
    template_name = 'entries\entry_update_form.html'
    
    def get_success_url(self):   
         
        return reverse_lazy(
            "entry-detail",
            kwargs={"pk": self.object.pk}
        )
        

class EntryDeleteView(DeleteView):
    model = Entry
    success_url = reverse_lazy("entry-list")
    template_name = 'entries\entry_delete.html'
    

Имеет ли это какое-либо отношение к пользовательским сессиям? - Я не уверен, пожалуйста, помогите!

Да, вы можете сделать это легко. Но перед этим вы должны добавить дополнительное поле в вашу модель Entry.

# models.py
from django.contrib.auth import get_user_model
User = get_user_model()

class Entry(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='entries')
    # your other remaining fields

и обязательно выполните команды makemigrations и migrate после добавления нового поля. А в вашем файле views.py добавьте команду get_queryset(self)

# Create your views here.
class ELV(ListView):
    model = Entry
    template_name = 'entries\entry_list.html'
    
    def get_queryset(self):
        return Entry.objects.filter(user=self.request.user).order_by("-date_created")

PS: И неплохо бы добавить LoginRequiredMixin, чтобы убедиться, что только authenticated получил доступ, который вы ListView

from django.contrib.auth.mixins import LoginRequiredMixin


class ELV(LoginRequiredMixin, ListView):
   # ...

Вот ссылка docs

Мне также нужно было добавить этот бит к моему представлению создания входа (ECV), как только это было сделано, все заработало как шарм!

def form_valid(self, form):
    form.instance.user = self.request.user
    return super(ECV, self).form_valid(form)
        
Вернуться на верх