开发者

How to initialize model with calculated value

I have a Django model Reminder related to Event model.

class Reminder(models.Mod开发者_如何学JAVAel):
    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,)

How, using __init__ set Reminder's date field value to the date of Event model related to it - 7 days ? Is it possible ?


I don't know what exactly you need, but:

1) If you need Reminder.date always return 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) If you need to set the date on event save or on reminder save, do this:

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)

Please note that I haven't tested the code and there might be typos.


just add this to the ____init____ method of your Reminder class. If you are setting this in the ____init____ method then you need to create the Event at the same time.

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜