2009-07-30 7 views
3

Je travaille sur une application de calendrier dans django et je souhaite prendre en charge des événements qui se répètent une quantité infinie de fois après une date de début donnée. Je vais stocker des "événements de bloc" où chaque bloc comprend des données sur un certain événement (titre, description ...) ainsi que le motif avec lequel il se répète et une "date d'expiration". De cette façon, je ne stocke qu'un seul enregistrement pour un groupe de peut-être des centaines d'instances répétées d'un événement. Si je veux faire une "exception", je peux diviser ce bloc d'événement autour de l'exception et avoir chaque bloc lié aux blocs précédents et futurs. Mon problème est que je veux être en mesure d'exécuter des requêtes pour récupérer tous les "événements logiques" dans une période donnée comme si un nouvel enregistrement d'événement était inséré pour chaque instance d'une répétition. Essentiellement, je veux révéler un modèle django pour chaque événement à mon application (et l'application d'administration de Django), mais stockez un modèle unique, différent, pour chaque groupe d'événements dans ma base de données. Est-ce possible, et si oui .. comment? Ou y a-t-il une meilleure approche pour répéter des événements?Répétition indéfinie d'événements dans le calendrier django

Répondre

2

Une approche possible consiste à avoir deux modèles différents. Vos événements sont comme vous les avez. Ensuite, ayez un modèle "timespan". Vous pouvez ensuite utiliser le début et la fin de la période pour saisir tous les événements pertinents qui se situent dans la plage. Si vous affichez un arrangement non flexible, le modèle Timespan peut être un "CalendarDay", puis un modèle "Calendar" peut contenir une semaine (ou un mois, ou peu importe) de CalendarDays et utiliser cette information pour obtenir le bon ensemble d'événements.

5

Jetez un oeil à django-schedule, qui a déjà mis en œuvre un système pour cela. Ils utilisent a Period class qui sait comment collecter des occurrences d'événements individuels dans un laps de temps donné, et ainsi ils peuvent supporter une récurrence infinie. Si vous voulez manifester de vrais objets de modèles individuels dans l'admin Django pour chaque occurrence d'un événement récurrent, c'est aussi possible, mais vous devrez renoncer à la récurrence infinie (vous ne pouvez pas générer un nombre infini) des objets modèles). J'ai implémenté ceci pour un projet: chaque objet Occurrence individuel avait une ForeignKey optionnelle à un modèle de récurrence, qui stockait les métadonnées sur la récurrence (c'est-à-dire "hebdomadaire le lundi à partir de cette date"). Dans la méthode save() de l'objet Recurrence, je voudrais supprimer ou créer l'une de ses Occurrences liées nécessaires pour correspondre à ses nouvelles données.

La première solution est une solution générale supérieure au problème, mais vous devrez peut-être faire plus d'interface utilisateur vous-même, car vous ne pouvez pas transformer chaque Occurrence en instance de modèle réelle.

Questions connexes