2016-04-23 7 views
2

私はUsersJobsです。 UserJobを作成した場合にのみ、このJobの情報を編集することができます。1人のユーザーにのみ "UpdateView"を表示させる方法はありますか?

そこで彼はURL .../job/update/<id>を訪問します。 JobUserJobForeignKeyで、それから彼は、データを変更することができます。そうでなければ、彼は404エラーを取得します(彼によって作成された場合。

view機能では、私はおそらく、現在のUseridを取得し、Jobsにこのidを比較します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) 
    ... 

答えて

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) 
関連する問題