Comment puis-je utiliser le Django ORM pour interroger ce nombre à de nombreux exemples?

StackOverflow https://stackoverflow.com/questions/533726

  •  22-08-2019
  •  | 
  •  

Question

Je les modèles suivants:

class Author(models.Model):
  author_name = models.CharField()

class Book(models.Model):
  book_name = models.CharField()

class AuthorBook(models.Model):
  author_id = models.ForeignKeyField(Author)
  book_id = models.ForeignKeyField(Book)

Cela étant dit, je suis en train d'imiter cette requête en utilisant Django ORM (sélectionner tous les livres écrits par un auteur spécifique, en notant que les auteurs peuvent avoir de nombreux livres et livres peuvent avoir de nombreux auteurs):

SELECT book_name 
FROM authorbook, book
WHERE authorbook.author_id = 1
AND authorbook.book_id = book.id

J'ai lu cette FAQ sur le site Django, mais avant modifier ma structure de modèle et de supprimer AuthorBook, j'étais curieux de savoir si je pouvais imiter cette requête en utilisant la structure actuelle.

Était-ce utile?

La solution

Vous devriez être en mesure de le faire:

books = Book.objects.filter(authorbook__author_id=1)

pour obtenir un QuerySet d'objets correspondant à votre livre restriction author_id.

La bonne chose à propos de Django est que vous pouvez cuisiner ce et jouer avec elle dans la coquille. Vous pouvez également trouver http://docs.djangoproject.com/ fr / dev / sujets / db / requêtes / # spanning-multi-Précieuses relations pour être utile.

Autres conseils

"AuthorBook" ne semble pas modélisé correctement.

Vous devez utiliser un ManyToManyField:

class Book(models.Model):
  name = models.CharField()
  authors = models.ManyToManyField(Author)

Ensuite, vous pouvez faire:

books = Book.objects.filter(authors__id=1)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top