2017-07-25 1 views
0

J'ai un problème très similaire à Django filter queryset __in for *every* item in listfiltre Django tout ce qui a certains noms

je dois sélectionner tous prospects qui ont certaines certifications tel que défini par

class Prospect(models.Model): 
    certification = models.ManyToManyField(Certification, blank=True, related_name="certification_prospects") 

class Certification(models.Model): 
    name = models.CharField(max_length=200, null=True, blank=True) 

Par exemple, si je certifications ['CPA', 'PhD'] Je veux tous les prospects qui ont exactement le CPA & PhD, s'ils ont plus ou moins que les deux, je veux les exclure.

J'utilise cette solution, comme donner le lien précédent

def searchForProspectByCertifications(prospects, certifications): 
    prospects = prospects.filter(certification__in=certifications).annotate(num_certifications=Count('certification')).filter(num_certifications=len(certifications)) 

    return prospects 

Mais je reçois une erreur de ValueError: invalid literal for int() with base 10: 'CPA'

+0

Quel contenu ont donné perspectives, paramètres de certifications en méthode? –

Répondre

1

Essayez:

prospects.filter(certification__name__in=certifications) 
+0

merci, ça marche! –

+0

Vous êtes les bienvenus! –