如何只允许一个用户看到“UpdateView”?

时间:2016-04-23 12:51:10

标签: python django django-views models

我有UsersJobs。如果某些User创建了Job,那么他/她就可以编辑此Job的一些信息。

所以他访问了网址.../job/update/<id>。如果Job是由他创建的(UserForeignKey中的Job,那么他可以修改数据。否则他会收到404错误。

view函数中,我可能会获得当前Userid并将此idJobs ForeignKey进行比较。

但是class views中有很多模式和快捷方式,所以我很好奇如何这样做。

class EditOrderView(UpdateView):
    model = Job
    fields = ['language_from','language_to','level','short_description','notes',
              'text_to_translate','file']
    template_name = 'auth/jobs/update-order.html'


class Job(models.Model):
    customer = models.ForeignKey(User, related_name='orders', help_text=u"Zákazník")
    translator = models.ForeignKey(User, related_name='jobs', null=True, blank=True, help_text=u"Prekladateľ")
    price = models.FloatField(null=True, blank=True, help_text=u"Cena")

    language_from = models.ForeignKey(Language, related_name='jobs_from', null=True)
    language_to = models.ForeignKey(Language, related_name='jobs_to', null=True)
    ...

1 个答案:

答案 0 :(得分:3)

看起来您可以覆盖.get_object()方法并包含您自己的逻辑:

from django.shortcuts import get_object_or_404

class EditOrderView(UpdateView):
    model = Job
    ...

    def get_object(self, queryset=None):
        return get_object_or_404(self.model, pk=self.kwargs["pk"], customer=self.request.user)