【发布时间】:2022-07-02 21:52:19
【问题描述】:
我正在开发一个 Django 项目,用户将拥有一个银行记录。而且我不希望他们能够更新别人的银行记录,除了他们自己的。 我想使用 Django UserPassesTestMixin 来执行此限制,但每次尝试访问 UpdateView 时都会收到 403 Forbidden 错误。
这是我的模型代码:
class BankDetails(models.Model):
applicant = models.OneToOneField(User, on_delete=models.CASCADE, null=True)
bank = models.CharField(max_length=30, choices=BANK, blank=True, null=True)
account = models.CharField(max_length=20, blank=True, default=None, null = True)
name = models.CharField(max_length=60, blank=True, null=True)
branch = models.CharField(max_length=60, blank=True, null = True)
date = models.DateTimeField(auto_now_add=True)
这是基于类的视图代码:
from django.contrib.auth.mixins import PermissionRequiredMixin, LoginRequiredMixin, UserPassesTestMixin
class UpdateBank(LoginRequiredMixin, UserPassesTestMixin, UpdateView):
template_name = 'user/edit_bank.html'
model = BankDetails
form_class = ApplicantBankForm
def get_success_url(self):
return reverse_lazy('bank-detail',kwargs={'pk': self.get_object().id})
def test_func(self):
return self.get_object().applicant_id == self.request.user.pk
class BankDetailView(LoginRequiredMixin, DetailView):
template_name = 'user/bank_detail.html'
model = BankDetails
def get_success_url(self):
return reverse_lazy('app-submit', kwargs = {'pk' : self.get_object().id})
我的 urls.py 代码:
path('<int:pk>/update/', UpdateBank.as_view(), name = 'edit-bank'),
【问题讨论】: