必要时保存对象,否则使用现有

时间:2016-11-02 14:46:17

标签: django django-models

我的项目中有一个Scheduler模型。这个Scheduler模型说明了用户想要对项目执行某些操作的频率。可能有很多项目和用户,所以我想节省一些空间和查询时间。

每个项目都有一个Scheduler对象分配给自己。

class Scheduler(models.Model):
    monday = models.BooleanField(default=False)
    tuesday = models.BooleanField(default=False)
    wednesday = models.BooleanField(default=False)
    thursday = models.BooleanField(default=False)
    friday = models.BooleanField(default=False)
    saturday = models.BooleanField(default=False)
    sunday = models.BooleanField(default=False)

    hour_1 = models.BooleanField(default=False)
    hour_2 = models.BooleanField(default=False)
    hour_3 = models.BooleanField(default=False)
    hour_4 = models.BooleanField(default=False)
    hour_5 = models.BooleanField(default=False)
    hour_6 = models.BooleanField(default=False)
    hour_7 = models.BooleanField(default=False)
    hour_8 = models.BooleanField(default=False)
    hour_9 = models.BooleanField(default=False)
    hour_10 = models.BooleanField(default=False)
    hour_11 = models.BooleanField(default=False)
    hour_12 = models.BooleanField(default=False)
    hour_13 = models.BooleanField(default=False)
    hour_14 = models.BooleanField(default=False)
    hour_15 = models.BooleanField(default=False)
    hour_16 = models.BooleanField(default=False)
    hour_17 = models.BooleanField(default=False)
    hour_18 = models.BooleanField(default=False)
    hour_19 = models.BooleanField(default=False)
    hour_20 = models.BooleanField(default=False)
    hour_21 = models.BooleanField(default=False)
    hour_22 = models.BooleanField(default=False)
    hour_23 = models.BooleanField(default=False)
    hour_24 = models.BooleanField(default=False)

    def save(self,*args,**kwargs):
        scheduler = Scheduler.objects.filter(**{x:y for x,y in self.__dict__.iteritems() if x.startswith('hour') or x.endswith('day')})
        if scheduler:
            return scheduler
        super(Scheduler, self).save(*args, **kwargs)

当用户创建新项目并设置计划时,我希望Django检查是否存在此类Scheduler对象。如果是,请不要创建具有相同属性的新调度程序,而不是将现有对象分配给此项。这可以覆盖save方法。

问题是当User想要更新Scheduler时。我希望Scheduler不要更新。应该创建新的Scheduler,而不是那样,因为旧的调度程序可能被另一个项目使用。

我应该在save方法中添加什么内容?

0 个答案:

没有答案