python make Come consentire a un solo utente di vedere "UpdateView"?



django make database (1)

Ho un Users e un Jobs . Se un User crea un Job , allora e solo allora può modificare alcune informazioni di questo Job .

Quindi visita l'url .../job/update/<id> . Se il Job viene creato da lui (l' User è una ForeignKey in Job , allora può modificare i dati, altrimenti ottiene l'errore 404 .

Nella funzione di view , probabilmente ForeignKey id User corrente e confronterò questo id con Jobs ForeignKey .

Ma ci sono molti schemi e scorciatoie nelle class views quindi sono curioso di sapere come farlo in questo modo.

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

Answer #1

Sembra che tu possa eseguire l'override del metodo .get_object() e includere la tua logica:

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)




models