2017-07-29 1 views
0

J'ai des problèmes pour essayer d'utiliser le filtre de queryset avec mes modèles. C'est un contrôle pour les messages dans les groupes.django queryset filter foreignkey

Ceci est mon code:

class Post(models.Model): 
    title = models.CharField(max_length=120) 
    content = models.TextField() 


class Group(models.Model): 
    title = models.CharField(max_length=200) 
    url = models.URLField(unique=True) 


class Control(models.Model): 
    published = models.DateField(auto_now=False, auto_now_add=False) 

    group = models.ForeignKey(Group, on_delete=models.CASCADE) 
    post = models.ForeignKey(Post, on_delete=models.CASCADE) 

J'essaie d'obtenir tous les messages d'un groupe avec le titre "title":

queryset_list = Control.objects.filter(group__control="title") 

Mes modèles pourraient nit avoir raison, je m nouveau à ceci. Toute aide?

+0

Pourquoi avez-vous le modèle 'Control'? Est-il possible qu'un Post soit publié dans un groupe et pas dans un autre? –

+0

Oui, je pourrais avoir des messages différents pour des groupes spécifiques. –

Répondre

1

Peut-être que c'est une faute de frappe?

queryset_list = Control.objects.filter(group__title="title") 
#            ^^^^^^ 
posts_title = queryset_list.values('post__title') 
1

D'abord, vous devez ajouter un ManyToManyField sur Group (docs):

class Group(models.Model): 
    title = models.CharField(max_length=200) 
    url = models.URLField(unique=True) 

    posts = models.ManyToManyField('Post', through='Control') 

Les deux autres modèles restent les mêmes, mais maintenant vous pouvez facilement saisir les messages pour un groupe:

posts = Group.objects.get(title='some title').posts.all() 
+0

J'ai cette erreur: Fichier "", ligne 678, dans exec_module Fichier "", ligne 205, dans _call_with_frames_removed Fichier "/ home/renan/django/social-posts /src/control/models.py ", ligne 21, dans class Control (models.Model): Fichier" /home/renan/django/social-posts/src/control/models.py ", ligne 24, in Control groupe = models.ForeignKey (Groupe, on_delete = models.CASCADE) NameError: le nom 'Group' n'est pas défini –

+0

En supposant que vous ayez déplacé Group below Control? Mettez 'Group' entre guillemets:' group = models.ForeignKey ('Group', on_delete = models.CASCADE) ' –

+0

Eh bien, cela n'a pas fonctionné non plus. C'est mon code (sans la relation manytomany): https://bitbucket.org/renanbs/social-posts. –