je veux aussi chacun de ces événements pour être des modèles afin qu'ils puissent être vu dans leur propre espace.
Je commencerais par une approche plus facile. Tant que vos événements individuels n'ont pas des champs totalement différents, cela rendra les choses beaucoup plus faciles à gérer. Vous pouvez simplement utiliser un champ event_type
sur votre table d'événements:
from django.db import models
# Do not call your model Schedule because that's what the whole table
# represents. The django models define only one entity of it.
# So Event would be a suitable name.
class Event(models.Model):
EVENT_CHOICES = (
('meeting', 'Meeting'),
('vacation', 'Vacation'),
('birthday', 'Birthday'),
# [...]
)
user = models.ForeignKey(User)
time = models.DateTimeField()
event_type = models.CharField(max_length=30, choices=EVENT_CHOICES)
Pour obtenir votre schedule
vous pouvez le faire:
schedule = Event.objects.all()
Maintenant, vous pouvez voir, pourquoi annexe n'est pas un bon nom pour ce modèle . Vous avez seulement un calendrier composé de tous les événements de votre modèle d'événement.
Ensuite, dans vos vues, vous pouvez filtrer les événements, par ex. comme ceci:
birthdays_of_greg = Events.objects.filter(user__username='greg', event_type='birthday')
Pas besoin de beaucoup de modèles différents dans ce cas d'utilisation simple. Vous pouvez créer une vue qui affiche uniquement les anniversaires, les vacances, etc., ou uniquement les événements pour un utilisateur donné ou une combinaison de ceux-ci.
Si vous avez besoin de créer dynamiquement des types d'événements que vous pouvez créer un modèle EventType
et remplacer le event_type
CharField
avec un ForeignKey que:
from django.db import models
class Event(models.Model):
# all your event fields
event_type = models.ForeignKey('EventType')
class EventType(models.Model):
name = models.CharField(max_length=50)
Si vous voulez vraiment avancé, vous pouvez utiliser generic relations. Cela vous permet d'attacher n'importe quel modèle à un événement avec une clé étrangère générique.
https://docs.djangoproject.com/fr/1.10/ref/contrib/contenttypes/ – e4c5