Django 型号字段

Posted

技术标签:

【中文标题】Django 型号字段【英文标题】:Django Models Number Field 【发布时间】:2016-07-30 15:57:59 【问题描述】:

在 Django 中,我正在尝试创建一个模型,该模型将包含一个球员的球衣号码字段,并且想知道是否有办法将该字段限制为仅限数字输入。目前我在models.py中

number = models.CharField(max_length=2)

是否有与 CharField 不同的字段允许我将输入限制为仅数字?

【问题讨论】:

当然。 IntegerField. 知道这将是一个简单的答案。谢谢 不客气,尽管我认为在发布 *** 问题之前检查官方文档会更好。大约有十几个内置字段,您可以轻松地自己浏览它们。 PositiveSmallIntegerField 应该会更好,它采用从 0 到 32767 的整数值。 【参考方案1】:

关于 Django 的一个很酷的事情是它为您提供了不同类型的模型,请阅读 here。

对于你的情况,试试这样的

number = models.IntegerField()

您可以阅读有关IntegerField here 的更多信息

【讨论】:

【参考方案2】:

在模型或模型字段用于表单的情况下,Django 中有许多字段而不是 CharField:

如果您使用整数:number = models.IntegerField()

甚至

number = models.FloatField(),如果您想表示特定商品的价格。在计费软件中很有用。

还有一些类似 BigInteger 的字段,以防你想要更多的数字

详细参考查看:https://docs.djangoproject.com/en/1.11/ref/models/fields/

【讨论】:

【参考方案3】:

如果您使用序列化程序,则可以在这些情况下使用验证程序。例如,对于一个 10 位的 CharField,你可以有一个这样的验证器:

def postalcode_validator(value):
    rule = re.compile(r'^\d10$')
    if not rule.search(value):
        raise serializers.ValidationError("Postal code format must be XXXXXXXXXX")
    return value

然后,您可以将此验证器与序列化程序的 CharField 一起使用:

# serializers.py
...
postal_code = serializers.CharField(validators=[postalcode_validator])

此外,验证器也可以与模型字段一起使用,就像上面的示例一样。

【讨论】:

以上是关于Django 型号字段的主要内容,如果未能解决你的问题,请参考以下文章

Django模型:依赖字段

django 忽略表单集中更改的字段

Django ORM计数相关字段

Django 更改查询结果的字段类型(!)

Django,使用最低参数的多对多字段元素的ID注释字段

Django - 从相关表中获取一个附加字段