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)