我想允许用户仅在状态为“插入”时输入数据。单击“保存”按钮后,管理员将有时间验证数据,用户无法更改任何内容。实现此类权限的最佳方法是什么? View中是否有任何位置,或者我是否应该在加载页面时根据状态冻结模板中的某些按钮?我也很乐意向用户提供一些错误消息,例如。 “您的数据已保存。”
#models.py
STATUS_CHOICES = (
('i', 'inserting'),
('w', 'waiting'),
('a', 'accepted'),
('r', 'rejected'),
)
class Trip(models.Model):
user = models.ForeignKey(User)
status = models.CharField(max_length=1, choices=STATUS_CHOICES, default='i')
class Route(models.Model):
trip = models.ForeignKey(Trip)
from = models.CharField(max_length=255)
to = models.CharField(max_length=255)
class Invoice(models.Model):
trip = models.ForeignKey(Trip)
description = models.TextField(blank=True)
amount = models.DecimalField(max_digits=9, decimal_places=2)
#views.py
class ListView(generic.TemplateView):
template_name = 'trip.html'
def get_context_data(self, **kwargs):
context = super(ListView, self).get_context_data(**kwargs)
...
return context
@method_decorator(login_required)
def dispatch(self, *args, **kwargs):
return super(ListView, self).dispatch(*args, **kwargs)
答案 0 :(得分:0)
这不是完美的解决方案,但它可以完成工作。我不得不为UpdateView和FormView覆盖DeleteView的delete()和form_valid()。我希望它不会破坏任何东西。不幸的是,它没有为用户提供很好的反馈。
class DeleteView(edit.DeleteView):
def delete(self, request, *args, **kwargs):
if status == 'i':
self.object.delete()
return HttpResponseRedirect(self.get_success_url())
class FormView(edit.FormView):
def form_valid(self, form):
if status == 'i':
data.save()
return super(FormView, self).form_valid(form)