Personnaliser une classe generique

Comment appliquer un traitement dans une classe generique ?

a marqué ce sujet comme résolu.

Bonjour, :)
Comment faire pour effectuer un traitement dans une classe générique ?

J'aimerais savoir comment reproduire le même comportement de le fonction ci-dessous avec une classe generique (En lui appliquant un décorateur peut-être ?) .
La fonction permet à l'user de consulter son profil et uniquement le sien.

1
2
3
4
5
6
def getProfileData(request, id):
    currentUserId = request.user.id
    if int(id) == currentUserId :
        datas = User.objects.get(id=id)
        return render(request, 'member/profil.html', locals())
    #else : ... return redirect('...')

La classe:

1
2
3
4
class getProfileData(DetailView):
    model = User
    context_object_name = "datas"
    template_name = "member/profil.html"
+0 -0

Salut,

A priori, tu peux tenter de surcharger la méthode dispatch pour qu'elle fasse le boulot de vérifier les identifiants.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
class getProfileData(DetailView):
    model = User
    context_object_name = "datas"
    template_name = "member/profil.html"

    def dispatch(self, *args, **kwargs):
        currentUserId = self.request.user.id
        if int(kwargs["id"]) != currentUserId:
            return redirect(...)
        return super().dispatch(self, *args, **kwargs)

    def get_context_data(self, *args, **kwargs):
        context = super().get_context_data(*args, **kwargs)
        context["datas"] = User.objects.get(id=int(self.kwargs["id"]))
        return context
+0 -0

Finalement, j'ai utilisé une autre manière de procéder pour éviter ce traitement inutile.
Et le code me génère une erreur 'getProfileData' object has no attribute 'method'
Hors à aucun moment n'utilise un attribut 'method'? o_O
L'erreur est peut-être dû au faite qu'on utilise la méthode dispatch sans préciser le type de méthode de requête (Get/Post) utilisée ?

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte