0
votes

Filtrer l'objet Django avec un autre objet

Django 1.11. J'ai un modèle article et un autre modèle loadarticles . xxx

Je veux obtenir une liste de tous les articles qui n'ont pas été lus . J'utilise déjà déjà q : xxx

comment passer à suivre pour exclure tous les articles dont la combinaison ID / utilisateur se situe dans le lis_articles < / code> table?


2 commentaires

Vous recherchez des articles non lus par l'utilisateur actuel ou de ne pas lire par personne?


Désolé de ne pas être clair: Oui, non lu par l'utilisateur actuel.


3 Réponses :


0
votes

Vous pouvez exclure article code> a référé loadarticle code> objets avec l'utilisateur actuel.

Article.objects.filter(
    length__lt=5000,
).exclude(
    readarticle__user=current_user,
)


6 commentaires

Cela ne fonctionnerait que si readarticle était un champ dans article , non? Ou du moins c'est ce que mon message d'erreur me dit.


Non, Readarticle est un Readarticle référence de la classe, de sorte qu'il vérifie s'il y a des modèles loadarticle connecté à article Pour ce QuerySet Il affiche uniquement l'article sans Readarticle Références.


Cela ne fonctionne pas car article n'a aucun attribut utilisateur


Corrigé. S'il vous plaît voir Modifier la version.


Toujours faux, retournera toujours en queyYset vide. Vous ne pouvez pas être vide et avoir un attribut utilisateur défini en même temps ...


@DirkGroten vous avez raison, je pense que le seul moyen est d'exclure article avec ReaderArcticuler avec l'utilisateur actuel.



1
votes

Essayez la requête suivante, substituant un objet utilisateur pour : xxx


2 commentaires

id__in = [ra.article.id pour RA in ....] est un peu plus facile que la double boucle. Mais cela fera deux questions à la base de données plutôt qu'une seule requête.


Vous pouvez également utiliser .values ​​("id") pour ignorer la compréhension de la liste ou probablement id__in = subquery (readarticle.ObjectS.filter (utilisateur = ). "ID")) pourrait fonctionner aussi bien.



2
votes

Étant donné que vous n'avez pas déclaré nom de client associé , tout ce qui devrait être nécessaire est .exclude : xxx


5 commentaires

Cela a-t-il énuméré les choix à l'exception?


@Gluepear qui n'est pas possible avec les modèles que vous avez montrés. "Pour faire référence à une relation" inverse ", utilisez simplement le nom minuscule du modèle." (Voir Ce )


Oui, il répertorie l'ID, le nom et la longueur


C'est la bonne réponse, à moins que vos modèles ne soient pas exactement définis comme vous nous prononcent.


@Dirkgoten true, j'ai simplifié mes modèles