3

Django ne prend pas en charge l'affichage des objets associés d'une relation many-to-many dans la liste des modifications pour une bonne raison. Il en résulterait beaucoup de hits de base de données.Django: Afficher les champs many-to-many dans la liste des modifications

Mais parfois, il est inévitable et nécessaire, par ex. afficher les catégories d'un objet, qui ont une relation plusieurs-à-plusieurs avec l'objet, dans la liste des modifications. Dans ce cas, quelqu'un a-t-il des expériences/snippets, etc. pour accélérer un peu (en pensant à la mise en cache, aux requêtes SQL personnalisées ...)? (Je suis conscient du fait que je peux faire une méthode qui appelle object.categories.all() ... Mais cela peut vraiment être une douleur dans le cul ...).

+0

Que se passerait-il si vous renvoyiez une liste de valeurs à plat avec la valeur d'affichage des données associées, et que vous la mettez en cache par instance dans votre modèle parent? Puis reliez un signal pour réinitialiser ces valeurs mises en cache lorsque le modèle parent est enregistré. – Brandon

Répondre

1

Ici, vous devez faire un choix à propos de denormalization dans votre modèle si vous pensez qu'une base de données plus frappée par ligne dans votre liste de modifications est inacceptable.

La question est de savoir comment stocker cette relation ManyToMany? Peut-être que vous pouvez aller avec un JSON serialized object synchronisé dans un CharField ou un TextField pour sérialiser le sous-ensemble de champs dont vous avez besoin (pk et name par exemple).

Mais attention aux effets secondaires sur les performances lors de l'ajout d'une colonne potentiellement volumineuse, le defer method du jeu de queries est votre ami.

Questions connexes