J'ai deux modèles d'article et de blog liés à l'aide d'une clé étrangère. Je souhaite sélectionner uniquement le nom du blog lors de l'extraction de l'article.
articles = Articles.objects.all().select_related('blog__name')
La requête générée montre qu'elle a sélectionné tous les champs du modèle Blog. J'ai essayé d'utiliser seulement () et defer () avec select_related mais les deux n'ont pas fonctionné.
articles = Articles.objects.all().select_related('blog__name').only('blog__name', 'title', 'create_time')
La requête ci-dessus a généré une erreur: nom (s) de champ non valide (s) donné (s) dans select_related: les choix sont: blog
Comment générer une requête pour que seuls les champs d'article et le nom du blog soient sélectionnés?
Vous pouvez utiliser annotate () pour cela.
>>> a = Articles.objects.annotate(blog_name=F('blog__name')).first()
>>> a.title
>>> a.blog_name
select_related
doit être utilisé sur l'ensemble du modèle, puis vous pouvez le filtrer davantage. Cela fonctionnera:
Articles.objects.select_related('blog').only('blog__name', 'title', 'create_time')