2017-02-01 5 views
0

Schedule est mon modèle qui contient tous mes événements en un seul endroit (réunions, vacances, anniversaires, etc), mais je veux aussi que chacun de ces événements soient des modèles afin qu'ils puissent être vus dans leur propre espace. Comment pourrais-je mettre les événements en tant que choix de sorte que lorsque j'ajoute un événement spécifique à mon calendrier, dans ce cas - un rappel, il ajoute le rappel à mon calendrier ET des rappels, mais pas à des vacances ou des anniversaires.Choix du modèle Django en utilisant d'autres modèles

C'est ce que j'ai jusqu'ici, je crois que je mettrais les événements individuels dans SCHED_CHOICES mais je ne sais pas comment j'appellerais les modèles à l'intérieur de cela pour le mettre à jour et enregistrer l'événement au modèle spécifique et non seulement le modèle d'horaire.

class Schedule(models.Model): 
    SCHED_CHOICES = (

    ) 
    user = models.ForeignKey(User) 
    time = models.DateTimeField() 
+0

https://docs.djangoproject.com/fr/1.10/ref/contrib/contenttypes/ – e4c5

Répondre

0

Je voudrais juste ajouter un champ event_category à votre modèle Schedule avec choix de « rappel », « anniversaire », etc. Ensuite, vous pouvez filtrer par catégorie d'événement: Schedule.objects.filter(event_category__exact='birthday').

Si vous voulez vraiment un modèle distinct pour chaque catégorie d'événement, vous pouvez utiliser un OneToOneField pour relier les dossiers ensemble:

class Birthday(models.Model): 
    event = models.OneToOneField(Schedule, on_delete='models.CASCADE') 
    ... 
0

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_typeCharField 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.