基于状态

时间:2015-11-11 17:32:17

标签: python django permissions

我想允许用户仅在状态为“插入”时输入数据。单击“保存”按钮后,管理员将有时间验证数据,用户无法更改任何内容。实现此类权限的最佳方法是什么? 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)

1 个答案:

答案 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)