在一周的特定日期在模型级别验证Django DateField的最佳实践是什么?


问题内容

我有一个模型:

class MyModel(models.Model):
    user = models.ForeignKey(User)
    week = models.DateField()

我的应用是围绕“以周六结束的周”构建的,因此我希望该week字段仅接受周六的日期。

我希望此验证发生在中,Model而不是在中进行Form,因为Form在某些情况下,我将不需要输入数据。

我知道重写模型的save()方法来添加afull_clean()可能是可行的方法,但是我对这里的最佳实践感到困惑。

最干的方法是什么?


问题答案:

我会提供一个验证器,尤其是当您输入不带表单的数据时需要一个干净的数据库时。

如果输入为datetime.date,则可以使用mydate.weekday()获取星期几。星期六应该为“ 5”。

就像是:

def validate_saturday(value):
    if not value.week.weekday == 5:
        raise ValidationError("Date should be a Saturday.")

另一种选择是在模型中指定星期数,而不是DateField。