Question

Je suis tombé sur ce problème et mon cerveau noob s'est fait frire en essayant de le résoudre. J'ai l'impression qu'il y a des concepts de base ici qui me manquent.

J'ai donc ce modèle "Films" avec un champ de choix de catégorie et une relation M2M avec un modèle "Directors", et j'essaie d'écrire 2 vues différentes, celle qui renvoie une liste de films filtrés par catégorie et celui qui renvoie une liste de films filtrés par le réalisateur. Le premier est facile, mais je ne sais tout simplement pas comment obtenir le champ de nom du modèle du réalisateur pour créer le deuxième filtre.

J'ai donc ces modèles (j'ai retiré les trucs non pertinents, y compris la catégorie que j'ai mentionnée ci-dessus)

class Director(models.Model):
    name = models.CharField(max_length=50)
    web = models.URLField(blank=True, help_text= "opcional")


class Film(models.Model):

    name = models.CharField(max_length=50)
    slug = models.SlugField(max_length= 15)
    director = models.ManyToManyField(Director, blank=True, help_text= "opcional")

Cette URL

(r'^peliculas/director/(?P<director>\w+)/$', 'filtered_by_director'),

Et cette vue

def filtered_by_director(request,director):
    return list_detail.object_list(
        request, 
        queryset = Film.objects.filter(director.name=director),
        template_name ='sections/film_list.html',
        template_object_name = 'film',
        paginate_by = 3

        )

Le même modèle est censé être utilisé par les deux vues pour rendre la liste pertinente des objets que la vue n'aime pas le filtre que j'utilise sur le questiont QueySet pour le champ M2M, mais je n'ai aucune idée de la façon de le faire vraiment, je 'J'ai essayé tout ce à quoi je pouvais penser et cela me donne un "mot-clé ne peut pas être une erreur"

Toute aide à ce noob modeste sera appréciée.

Était-ce utile?

La solution

Ligne queryset = Film.objects.filter(director.name=director),

Doit lire: queryset = Film.objects.filter(director__name=director),

Les recherches sur le terrain sont effectuées par __ Syntaxe à double soulignement:http://docs.djangoproject.com/en/dev/topics/db/queries/#field-lookups

Autres conseils

Dans votre filtre, essayez de spécifier le nom du réalisateur comme (Documentation):

filter(director__name=director)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top