python
  • django
  • django-models
  • initialization
  • 2010-07-06 5 views 1 likes 
    1

    J'ai un rappel de modèle Django lié au modèle d'événement.Comment initialiser le modèle avec la valeur calculée

    class Reminder(models.Model): 
        email = models.EmailField("e-mail") 
        event = models.ForeignKey(Event, unique=True, related_name='event',) 
        date = models.DateTimeField(_(u"Remind date"), auto_now_add=False,) 
    
    class Event(models.Model): 
        date = models.DateTimeField(_(u"Event Date"), auto_now_add=True,) 
    

    Comment, en utilisant la valeur de champ de date de __init__ Rappel à la série date du modèle d'événement lié à lui - 7 jours? C'est possible ? Ajoutez simplement ceci à la méthode ____init____ de votre classe Reminder.

    Répondre

    2

    Je ne sais pas exactement ce dont vous avez besoin, mais:

    1) Si vous avez besoin Reminder.date toujours revenir Event.date - 7

    import datetime 
    
    
    class Reminder(models.Model): 
        email = models.EmailField("e-mail") 
        event = models.ForeignKey(Event, unique=True, related_name='event',) 
    
        def date(self): 
         return self.event.date - datetime.timedelta(days=7) 
    
    
    class Event(models.Model): 
        date = models.DateTimeField(_(u"Event Date"), auto_now_add=True,) 
    

    2) Si vous avez besoin pour régler la date sur l'événement de sauvegarde ou de rappel sauver, faites ceci:

    import datetime 
    
    
    class Reminder(models.Model): 
        email = models.EmailField("e-mail") 
        event = models.ForeignKey(Event, unique=True, related_name='event',) 
        date = models.DateTimeField(_(u"Remind date"), auto_now_add=False,) 
    
        # update date on save 
        def save(self, *args, **kwargs): 
         self.date = self.event.date - datetime.timedelta(days=7) 
         super(Reminder, self).save(*args, **kwargs) 
    
    class Event(models.Model): 
        date = models.DateTimeField(_(u"Event Date"), auto_now_add=True,) 
    
        # update all reminders on event save 
        def save(self, *args, **kwargs): 
         reminder_date = self.date - datetime.timedelta(days=7) 
         self.reminders.update(date=reminder_date) 
         super(Event, self).save(*args, **kwargs) 
    

    S'il vous plaît noter que je ne l'ai pas testé le code et il pourrait y avoir fautes de frappe.

    1

    Si vous définissez ceci dans la méthode ____init____, vous devez créer l'événement en même temps.

    e = Event() 
    self.event = e 
    self.date = e.date 
    e.put()
    +0

    pas quelque chose comme self.date = self.event.date? – crivateos

    +0

    Désolé. J'ai mal compris votre question. J'ai édité ma réponse. –

    Questions connexes