Django 用户管理:如何避免每个用户看到其他用户的内容和数据?

Django User Management: how to avoid that each user sees content and data from other users?

在我的小型 Django 项目中,用户可以注册并通过填写一些模型表单,他们可以用自己的数据填充现有模型。

问题是登录后,任何用户不仅可以看到自己的数据,还可以看到其他用户创建的数据。 我需要避免这种情况。
每个用户都应该能够查看、修改自己的数据并与之交互。

每个模型都有属性用户,它是 ForeignKey 链接到 User
我可能在视图中遗漏了什么吗?
它们只是基于 class 的视图,不涉及 User,它们只有 LoginRequiredMixin 装饰器。

对于登录视图,我使用的是 Django 标准,对于注册视图,我创建了 UserFormView.

# Register page
url(r'^register/$', views.UserFormView.as_view(), name='register'),

# Login page
url(r'^accounts/login/$', auth_views.LoginView.as_view(), name='login'),

以下是我的看法:

class AllProgramsView (LoginRequiredMixin, generic.ListView):
    template_name = 'programs/index.html'
    context_object_name = 'programs_list'

    def get_queryset(self):
        return Program.objects.all()

class ProgramDetailView (LoginRequiredMixin, generic.DetailView):
    model = Program
    template_name = 'programs/program.html'

class ProgramCreate(LoginRequiredMixin, CreateView):
    model = Program
    form_class = ProgramFormClass

class ProgramUpdate(LoginRequiredMixin, UpdateView):
    model = Program
    form_class = ProgramFormClass

models.py中:

class Program(models.Model):
    program_name = models.CharField(max_length=50)
    program_description = models.CharField(max_length=250)
    is_favourite = models.BooleanField(default="False")
    user = models.ForeignKey(User, on_delete=models.CASCADE)

    def get_absolute_url(self):
        return reverse('programs:program', kwargs={'pk': self.pk})

    def __str__(self):
        return self.program_name

是否有正确的程序可以将每个用户与其他用户分开?

您可以通过以下方式获取请求查看和过滤其记录的当前用户

class AllProgramsView (LoginRequiredMixin, generic.ListView):
 template_name = 'programs/index.html'
 context_object_name = 'programs_list'

 def get_queryset(self):
    user = self.request.user
    queryset = Program.objects.filter(user=user)
    return queryset