我有以下模型:
class Completion(models.Model):
date_completed = models.DateTimeField(auto_now=False, auto_now_add=False)
related_task = models.ForeignKey(Task, on_delete=models.CASCADE)
我需要检查每个Completion
有唯一的日期(不是日期时间-只有日期)为每个任务(这是Completion
的相关字段)。换句话说,我需要这样的东西:
class Meta:
unique_together = [
'date_completed__date',
'related_task'
]
我知道它不这样工作(也不应该),所以我想问,我如何才能达到预期的结果(如果完全可能的话)。
2条答案
按热度按时间w80xi6nr1#
一种方法是添加一个新的属性来仅保存DateField并将其用于约束。我认识到这并不能完全满足您的要求,并且需要首先允许空值,转换当前日期时间值的日期字段,但取决于您在此过程中的位置,它可能是可行的。据我所知,唯一性是在数据库级别强制执行的,并且剥离时间的函数可能无法工作。
在unique_together部分中
CREATE TABLE语句中包含相应的UNIQUE语句
附带说明一下,文档建议使用UniqueConstraint作为
请改用UniqueConstraint和约束选项。
UniqueConstraint提供了比unique_together更多的功能。unique_together将来可能会被弃用。
wnavrhmk2#
根据文档,字段选项中有一个唯一的_for_date属性。对于任何与同样问题作斗争的人来说,可能值得一试。对于您的示例,它看起来像这样:
如果有多个约束,这可能不是最好的选择。