2016-09-15 1 views
0

I ont des modèles suivants:Comment ajouter queryset à la relation ManyToMany?

class EnMovielist(models.Model): 
    content_ID = models.CharField(max_length=30) 
    release_date = models.CharField(max_length=30) 
    running_time = models.CharField(max_length=10) 
    actress = models.CharField(max_length=300) 
    series = models.CharField(max_length=30) 
    studio = models.CharField(max_length=30, null=True) 
    director = models.CharField(max_length=30) 

    def __str__(self): 
     return self.content_ID 


class EnActress(models.Model): 
    name = models.CharField(max_length=100, null=True) 
    movielist = models.ManyToManyField(EnMovielist, related_name='movies') 

    def __str__(self): 
     return self.name 

J'ai eu erreur lorsque je tente de ce shell dans Django,

b = EnActress.objects.values_list('name', flat=True) 
a = EnMovielist.objects.filter(actress__contains=b).values_list('content_ID') 

b.movielist.add(a) 



AttributeError: 'QuerySet' object has no attribute 'movielist' 

Comment puis-je ajouter dans django queryset many-to-many domaine? Je n'ai aucune idée de pourquoi cela se passe .. Toute aide appréciée! :)

+0

Si vous avez encore besoin de travailler avec des jeux de requête, vous ne devriez pas utiliser 'values_list', le code que vous avez montré n'a pas beaucoup de sens et je ne suis pas sûr de ce qu'il essaie d'accomplir – Sayse

Répondre

0

Vous ne devriez pas utiliser values_list si vous avez l'intention de add une nouvelle relation après. De l'docs:

values() et values_list() sont toutes deux conçues comme des optimisations pour un cas d'utilisation spécifique: la récupération d'un sous-ensemble de données sans la surcharge de créer une instance de modèle

[accent le mien]

Il est difficile de dire ce que vous faites sans avoir une bonne description de f ce que vous voulez réaliser.

0

Vous devez appeler m2m add depuis l'instance et l'entité d'ajout doit également être une instance de modèle. Sinon, votre expression n'a pas de sens.

b = EnActress.objects.get(pk=some_pk) # get an instance, not queryset 
a = EnMovielist.objects.get(pk=some_pk) # also instance 
b.movielist.add(a)