J’essaie de request.user pour méthode propre d’un formulaire, mais comment je peux accéder à l’objet de la demande ? Puis-je modifier la méthode propre pour permettre l’entrée des variables ?
Réponses
Trop de publicités?La réponse de Ber - stocker dans threadlocals - est une très mauvaise idée. Il n’y a absolument aucune raison de faire de cette façon.
Une bien meilleure façon consiste à substituer du formulaire méthode pour prendre un paramètre de mot clé supplémentaire,
. Cette option stocke la demande dans le formulaire, où c’est nécessaire, et où vous pouvez y accéder dans votre propre méthode.
et, à votre avis :
L'habitude, l'approche consiste à stocker l'objet de la requête dans un thread local de référence à l'aide d'un middleware. Ensuite, vous pouvez accéder à partir de n'importe où dans votre application, y compris le Formulaire.méthode clean ().
La modification de la signature du Formulaire.méthode clean() signifie que vous devez vous propre version modifiée de Django, qui peut ne pas être ce que vous voulez.
Merci middleware compter ressembler à quelque chose comme ceci:
import threading
_thread_locals = threading.local()
def get_current_request():
return getattr(_thread_locals, 'request', None)
class ThreadLocals(object):
"""
Middleware that gets various objects from the
request object and saves them in thread local storage.
"""
def process_request(self, request):
_thread_locals.request = request
Enregistrer cette middleware comme décrit dans la Django docs
Je suis tombé sur ce problème particulier lors de la personnalisation de l’admin. J’ai voulu un certain domaine pour être validé basé sur les informations d’identification de l’admin le particulier.
Étant donné que je ne voulais pas modifier la vue pour transmettre la demande en tant qu’argument à la forme, voici ce que j’ai fait :
fromage frais de cheesebaker@pypi : django-requestprovider