Python Django模型-小时数计算器

Python Django模型-小时数计算器,python,django,model,Python,Django,Model,晚上好! 我有个问题。我在网上找不到如何解决我的问题。我想有一个数据库行,我可以把小时-不是日期时间或时间,但例如01:34(1小时34分钟)。我不知道该怎么办有人能帮我吗 关于一种常见的解决方案是在整数字段中存储分钟或秒,然后在输出或渲染时格式化总分钟数 将秒显示为分钟的示例模板标记:秒 @register.filter def custom_time_format(seconds_total): minutes, seconds = divmod(seconds_total

晚上好! 我有个问题。我在网上找不到如何解决我的问题。我想有一个数据库行,我可以把小时-不是日期时间或时间,但例如01:34(1小时34分钟)。我不知道该怎么办有人能帮我吗


关于

一种常见的解决方案是在整数字段中存储分钟或秒,然后在输出或渲染时格式化总分钟数

将秒显示为分钟的示例模板标记:秒

@register.filter
def custom_time_format(seconds_total):     
    minutes, seconds = divmod(seconds_total, 60)
    return f"{minutes}:{seconds}"
模板代码示例,假设标记文件名为custom_time_tags.py

{% load custom_time_tags %}

{{ time_stored_as_int|custom_time_format }} 

你能详细说明一下你想要克服的限制吗? 例如,为什么datetime不能满足您的需要

没有任何其他信息,我会说,你可以考虑一个文本字段,它有一个特定的格式约束(如:H:M)用于输入,并且可以将该值保存为一个整数(仅将小时和分钟转换为分钟)。 如果这来自用户输入,那么最好在模型表单或模型上执行验证(失败时引发ValidationError)

例如,根据,你应该能够做这样的事情

class CustomTimeField(models.IntegerField):
  description = "A field to save time (str) H:M as tot minutes (int) in db, but act like a str"

  def get_db_prep_value(self, value, *args, **kwargs):
    if value is None:
      return None
    h, m = value.split(":")
    return int(h * 60 + m)

  def to_python(self, value):
    if value is None or isinstance(value, int):
      return value
    try:
      return f"{value//60}:{value%60}"
    except (TypeError, ValueError):
      raise ValidationError("This value must be a string or an int.")

  def from_db_value(self, value, expression, connection, context):
    return self.to_python(value)

  def formfield(self, **kwargs):
    from django.forms import TextField
    defaults = {'form_class': TextField}
    defaults.update(kwargs)
    return super(CustomTimeField, self).formfield(**defaults)

在你们的模型中,这是一个
TextField
吗?没有限制,它应该像一个小时日志,然后我可以总结一下