基于Django中的日期字段填充月份

时间:2016-06-24 15:58:15

标签: python django date django-models django-admin

我想让一个字段根据之前输入的日期自动生成月份。

models.py

class Projects(models.Model):
    Name = models.CharField(max_length=100, null=True, blank=False) 
    Date = models.DateField(null=True, blank=False)
    Month = models.CharField(max_length=100, null=True, blank=False)   

        def get_month(self):
            if self.Date:
                self.Month = self.Date.strftime("%B")
                self.save()

我在SO上看到了question并尝试了,但似乎没有发生任何事情。我错过了什么?我是否必须创建these之一?感谢。

1 个答案:

答案 0 :(得分:2)

您只需覆盖save即可添加自动字段,而无需在新方法中调用save

class Projects(models.Model):
    Name = models.CharField(max_length=100, null=True, blank=False) 
    Date = models.DateField(null=True, blank=False)
    Month = models.CharField(max_length=100, null=True, blank=False)  

    def save(self, *args, **kwargs):
        if self.Date: 
            self.Month = self.Date.strftime("%B")
        super(Model, self).save(*args, **kwargs)

但是,只有在保存实例后,上述内容才会使Month可用。

您可以改为创建一个属性,以便从模型实例中获取Month,并防止在数据库中添加重复信息:

class Projects(models.Model):
    Name = models.CharField(max_length=100, null=True, blank=False) 
    Date = models.DateField(null=True, blank=False)

    @property
    def Month(self):
        if self.Date:
            return self.Date.strftime("%B")
        return "No date entry"

你可以像这样使用这个属性:

import datetime.date as dt

# import your Projects model
p = Projects(Name='ceuskervin', Date= dt.today())

print(p.Month)