Как инициализировать модель с вычисленным значением - PullRequest
1 голос
/ 06 июля 2010

У меня есть напоминание модели Django, связанное с моделью события.

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,)

Как, используя __init__, установить значение поля даты напоминания на дату связанной с ним модели события - 7 дней?Возможно ли это?

Ответы [ 2 ]

2 голосов
/ 06 июля 2010

Я не знаю, что именно вам нужно, но:

1) Если вам нужно Reminder.date, всегда возвращайте 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) Если вам нужночтобы установить дату сохранения события или сохранения напоминания, сделайте следующее:

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)

Обратите внимание, что я не проверял код и могут быть опечатки.

1 голос
/ 06 июля 2010

просто добавьте это к методу ____init____ вашего класса напоминаний. Если вы устанавливаете это в методе ____init____, вам нужно одновременно создать событие.

e = Event()
self.event = e
self.date = e.date
e.put()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...