urls template python django django-views models

python - template - django urls



¿Cómo permitir que solo un usuario vea "UpdateView"? (1)

Tengo Users y Jobs . Si algún User crea un Job , entonces y solo entonces él / ella puede editar cierta información de este Job .

Entonces él visita la url .../job/update/<id> . Si el Job es creado por él (el User es una ForeignKey en el Job , entonces puede modificar los datos. De lo contrario, obtiene el error 404 .

En la función de view , probablemente obtendría la id User actual y compararía esta id con la ForeignKey Jobs .

Pero hay muchos patrones y accesos directos en class views así que tengo curiosidad por saber cómo hacerlo de esta manera.

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) ...


Parece que puede anular el método .get_object() e incluir su propia lógica:

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)