我看到的所有文档都暗示您可以这样做,但没有任何官方的w/r/t ulong64/uint64字段.在这个领域,有几个现成的 Select 看起来很有希望:

  • BigIntegerField.差不多了,但签了名;
  • PositiveIntegerField ... 令人怀疑的32位外观;和
  • DecimalField.根据the docs,用pythondecimal类型表示的固定指针--当套接字被套接起来时,它大概会变成类似的迂腐和缓慢的数据库字段,就像DECIMAL或NUMERIC PostgreSQL类型一样.

...所有的look个,像他们might一样,都存储着一个这样的数字.除了他们中没有一个人会promise ,就像休·格兰特(Hugh Grant)饰演的每一个浪漫喜剧角色一样.

我的主要标准是它与Django支持的后端一起工作,没有任何if postgresql (...) elif mysql (...)种特殊情况的胡说八道.在此之后,需要速度--这是视觉数据库应用程序中的一个模型字段,它将索引图像派生的数据(例如,感知散列和提取的关键点特征),从而允许按这些图像的内容进行排序和分组.

那么:是否有一个好的Django扩展或应用程序提供某种适合我用途的PositiveBigIntegerField

除此之外:如果有一种简单可靠的方法可以使用Django的股票ORM来存储未签名的64位整数,我很想知道.听着,我不是双星奇才;我必须在纸上做二的补足——所以如果你的这种方法涉及一些小技巧,不要犹豫,解释一下它是什么,即使你觉得它很明显.提前谢谢.

推荐答案

虽然我没有测试它,但你可能希望只是子类BigIntegerField.原来的BigIntegerField看起来像(source here):

class BigIntegerField(IntegerField):
    empty_strings_allowed = False
    description = _("Big (8 byte) integer")
    MAX_BIGINT = 9223372036854775807

    def get_internal_type(self):
        return "BigIntegerField"

    def formfield(self, **kwargs):
        defaults = {'min_value': -BigIntegerField.MAX_BIGINT - 1,
                    'max_value': BigIntegerField.MAX_BIGINT}
        defaults.update(kwargs)
        return super(BigIntegerField, self).formfield(**defaults)

派生PositiveBigIntegerField可能如下所示:

class PositiveBigIntegerField(BigIntegerField):
    empty_strings_allowed = False
    description = _("Big (8 byte) positive integer")

    def db_type(self, connection):
        """
        Returns MySQL-specific column data type. Make additional checks
        to support other backends.
        """
        return 'bigint UNSIGNED'

    def formfield(self, **kwargs):
        defaults = {'min_value': 0,
                    'max_value': BigIntegerField.MAX_BIGINT * 2 - 1}
        defaults.update(kwargs)
        return super(PositiveBigIntegerField, self).formfield(**defaults)

尽管在使用之前,您应该彻底测试它.如果您有,请分享结果:)

EDIT:

我遗漏了一件事-内部数据库表示.这基于由get_internal_type()返回的值,并且存储列类型的定义,例如.MySQL后台为here,确定为here.看起来覆盖db_type()将使您能够控制字段在数据库中的表示方式.但是,您需要找到一种方法,通过判断connection参数来返回db_type()中特定于DBMS的值.

Django相关问答推荐

当RST =True时RST CSS

为什么当对字段使用自定义序列化器时,Django Rest框架中Inbox字段会消失?

Django、htmx删除记录并更新

Django Prefetch上的多重过滤

如何在Django REST框架中管理序列化程序?

无法在views.py django中验证密码

Django如何在没有ctrl点击的情况下允许多选

在 django 中使用自定义 url 转换器传递 url 参数

如何计算 Django 模型中特定对象的数量?

- 不支持的操作数类型:DateField和DateField

Django获取具有值的相关对象的计数并将其添加到注释中

Django 模型命名约定

使用 south 重构具有继承的 Django 模型

直接在Django的模板中访问ForeignKey

Django判断字段是否为空?

模型 Django 中的 ID 字段

对 django 的 Http Delete 请求返回 301

Django unique_together 与可为空的 ForeignKey

Python/Django - 避免在源代码中保存密码

Django Rest 框架 ImageField