8
votes

Django Admin: Pass Variable par URL

Je veux transmettre une variable par URL à une autre page de Django Admin. Il semble que cela ne fonctionne pas, je veux transmettre la variable "/? nom = bonjour", et attrapez-le par demande.get.get ["nom", ""]. Mais l'URL devient "/? E = 1" après avoir passé. Si j'utilise le paramètre par défaut ', cela fonctionne, mais cela aura un conflit. Il semble que ce problème soit Django-admin seulement. Et j'ai besoin de passer par URL pas post ... Est-ce que quelqu'un sait résoudre ce problème

merci


1 commentaires

N'a pas de sens, request.get.get ["nom", ""] causerait typeError .


3 Réponses :


1
votes

Pouvez-vous expliquer votre problème un peu plus ... Pourquoi voulez-vous passer une variable à Django Admin ... Aussi, vous ne pouvez pas attraper une variable comme ça ... Utilisez:

request.GET.get('name','')


4 commentaires

J'ai utilisé y a utilisé demande.get.get ('nom', ''). Je veux transmettre la variable à admin pour dire, ce qui rapporte de se présenter. q = 0 pour montrer les rapports soumis. q = 1 pour montrer les rpoets qui ont été attribués et etc.


Je ne peux que cela qu'en utilisant le paramètre q. quel Q est utilisé par la recherche déposée. c'était bien. Mais maintenant, je dois utiliser le champ de recherche. et q sera utilisé pour cela. Donc, j'ai besoin de le réparer vraiment.


Vous pouvez penser pourquoi je ne pense pas poster. Cette raison est que, s'il y a plus de rapports qu'une page peut montrer. Djang Admin Utilisez p = 1, p = 2 pour utiliser plusieurs pages pour afficher tous les rapports. Mais si je n'utilise pas obtenir, ça va perdre une piste


Pouvez-vous poster vos modèles. Voulez-vous filtrer les résultats du site administrateur? Je pense que ce que vous voulez, c'est une option list_filter = ['champ1', "field2 '] dans l'administrateur.py de votre modèle. Cela ajoutera un filtre similaire à ce que vous voulez réaliser.



11
votes

Le problème est que la recherche nom code> n'existe pas lorsque le get_query_set code> essaie de le résoudre comme champ modèle. Ainsi, un incorreclookupparameters () code> est soulevé qui à son tour redirige vers l'URL "e = 1" non utile. Ce problème est résolu dans Django 1.4 avec l'introduction de filtres personnalisésPecs. Jusque-là, une solution possible consiste à écraser de manière dynamique la classe code> ChangeList code> renvoyée par votre Modeladmins code> get_changelist () code> méthode.

Cette solution fonctionne sur Django 1.3: P>

class MyModelAdmin(ModelAdmin):

    def get_changelist(self, request, **kwargs):
        changelist_class = super(MyModelAdmin, self).get_changelist(request, 
                                                                 **kwargs)

        class CustomChangeList(changelist_class):
            def __init__(self, request, *args, **kwargs):
                self._name = request.GET.get('name')
                super(CustomChangeList, self).__init__(request, *args, **kwargs)

            def get_query_set(self, *args, **kwargs):
                if self._name:
                    del self.params['name']

                qs = super(CustomChangeList, self).get_query_set(*args, **kwargs)

                if self._name:
                    return qs.filter([FILTER WHAT YOU WANT HERE...])

                return qs


        return CustomChangeList


1 commentaires

Arrive à moi dans django 2.0 s'il y a plus d'un paramètre, par exemple point final /? A = B & C = D . Fonctionne bien avec un seul paramètre comme point final /? A = B



0
votes

On dirait que la question est toujours sans réponse et similaire à Une autre question . Meesterguyperson a posté là-bas une excellente réponse , allez-y.

La solution consiste à créer un "faux filtre" qui enregistrera un paramètre d'URL avec Django mais n'affectera pas l'apparence du site QuerySet et Admin. P>

J'ai adapté la réponse de Meesterguyperson un peu moi-même et au lieu d'utiliser un modèle vierge pour masquer le "faux filtre", j'exclure simplement it à partir du volet de filtre en retournant False de HAS_Output Méthode. P>

class SomethingAdmin(admin.ModelAdmin):
    ...

    list_filter = (
        ...,
        NameKwargPassThroughFilter,
        ...,
    )

    ...


0 commentaires