如何在Django中为Postgre数据库注册自定义RangeField

0 投票
0 回答
30 浏览
提问于 2025-04-12 07:46

我试着按照文档的说明去做,结果是这样的:

from django.db import models
from django import forms
from django.contrib.postgres.fields import RangeField
from psycopg.types.range import Range
from django.utils.translation import gettext_lazy as _


class TimeRange(Range):
    """Time interval."""
    pass


class TimeRangeFieldForm(BaseRangeField):
    """Form for time interval."""

    default_error_messages = {'invalid': _('Enter two valid times.')}
    base_field = forms.TimeField
    range_type = TimeRange


class TimeRangeField(RangeField):
    """Time interval field."""

    base_field = models.TimeField
    range_type = TimeRange
    form_field = TimeRangeFieldForm

    def db_type(self, connection):
        return 'timerange'

但是还有一个range_register()的东西,我就是搞不懂怎么在代码里使用它。而且当我尝试进行迁移时,出现了这个错误:django.db.utils.ProgrammingError: type "timerange" does not exist LINE 1: ...IDENTITY, "days" smallint[7] NOT NULL, "interval" timerange ...。请帮我理解一下如何创建自定义的范围字段。另外,我也不明白为什么有DateTimeRangeField和DateRangeField,但没有TimeRangeField……

0 个回答

暂无回答

撰写回答