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)