2016-04-23 59 views
2

我有一个UsersJobs。如果User创建了Job,那么只有他/她可以编辑此Job的某些信息。如何只允许一个用户看到“UpdateView”?

因此,他访问的网址.../job/update/<id>。如果Job是由他创建(该UserForeignKeyJob,那么他就可以修改数据,否则他会404错误。

view功能,我可能会得到当前User小号id和比较这idJobsForeignKey

但也有许多模式和快捷键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) 
    ... 

回答

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)