2009-11-29 9 views
1

Aimeriez-vous avoir votre avis? Au stade actuel (1.1) utiliseriez-vous des relations génériques dans django ou vous en tenir à une modélisation plus traditionnelle - étant donné qu'il est encore impossible de traverser et filtrer facilement de telles relations (par rapport aux relations ForeignKey, ManyToMany, OneToOne)? Voici un exemple - Je garde une trace dans la base de données quand chaque page a été vue pour la dernière fois par chaque utilisateur, quand il/elle a décidé de "suivre" un article, combien de fois veulent-ils recevoir des mises à jour et quand ils le demandaient une dernière fois, quand un tel courriel a été envoyé pour la dernière fois à l'utilisateur et le journal des révisions de la page. Donc, pour construire un condensé de courriel significatif, je dois construire des requêtes assez lourdes afin que les utilisateurs ne reçoivent pas plus de courriels qu'ils ne le demandent et que les messages soient plus informatifs et brefs. Une façon de le faire - définir un modèle d'activité qui peut s'adapter à n'importe quel scénario et les relier à d'autres modèles en utilisant une relation générique, autrement - définir des modèles séparés PageView, EmailUpdateLog, EmailSubscription et y accéder de la manière habituelle. L'inconvénient de l'utilisation d'une relation générique est qu'il est plus difficile de coder des requêtes complexes et qu'elles exécuteront un code plus lent et plus à l'envers dans les modèles et un accès plus facile aux objets généralisés (par exemple Activity).Relations génériques à Django

Avez-vous trouvé un scénario où la relation générique vous donne un énorme avantage, en plus d'être un concept intéressant? Peut-être avez-vous trouvé un autre moyen d'émuler les relations génériques?

Merci.

Répondre

-1

Tout dépend de vos besoins/tâches ..

Pour certaines tâches relations génériques sont très bien (et je les utilise) Pour d'autres une meilleure utilisation « modélisation traditionnelle »

+3

"Dans certains cas, c'est bon, pour certains, ce n'est pas bon." Merci de ne rien dire. –

2

Je doute votre hypothèse de départ:

donné qu'il est encore impossible de traverser et d'un filtre contre de telles relations facilement

Je ne pense pas qu'il soit particulièrement difficile de traverser et de filtrer les relations génériques. Tant que vous définissez les deux extrémités de la relation, les traversées vers l'avant et vers l'arrière fonctionnent à peu près de la même façon qu'avec les ForeignKeys normales.

Il est parfaitement possible de rendre ces requêtes aussi efficaces que les relations normales, donc je ne vois pas vraiment de problème.

+0

n'avez-vous pas besoin de deux jointures supplémentaires par relation générique? ils ne peuvent donc pas être aussi efficaces - au niveau de la base de données au moins. – Evgeny

+0

Peut-être que vous devriez l'implémenter et profiler votre code avant de faire cette supposition. – Soviut

Questions connexes