2016-04-23 42 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)