2017-05-17 3 views
0

J'ai une fonction comme ça ... ce qui me aide avec le code ré-écriture lors de l'appel à une requêteest-il un moyen facile de mettre à jour un ** kwarg lors de l'interrogation? django

def user_profile(self, **kwargs): 
    default_fields = { 
     'is_deleted': False, 
     'is_staff': False, 
     'is_active': False 
    } 
    kwargs.update(default_fields) 

    return Profile.objects.filter(**kwargs) 

mais disons, si je ne veux pas ajouter un nouveau paramètre dans la fonction et je veux remplacer le champ is_staff parfois * peut-être sur 20 requêtes seulement 1 besoin is_staff: True.

Est-ce un moyen facile?

J'ai pensé ajouter un autre paramètre dans la fonction pour détecter si True/False quelque chose comme ça qui fonctionnerait.

Mais je me demande s'il existe un moyen encore plus facile de le faire?

Merci d'avance pour toute suggestion.

+0

Vous pouvez trouver plus d'informations sur la fusion de deux dicts http://stackoverflow.com/questions/38987/how-to-merge-two-python-dictionaries-in-a-single-expression#26853961 – bomba1990

Répondre

0

Essayez ceci:

def user_profile(self, **kwargs): 
    default_fields = { 
     'is_deleted': False, 
     'is_staff': False, 
     'is_active': False 
    } 
    default_fields.update(kwargs) 

    return Profile.objects.filter(**default_fields) 

Fondamentalement, il suffit de tourner votre default_fields dict dans le dict de base, donc si vous voulez remplacer 'is_staff', il suffit de passer is_staff via kwargs.