gpt4 book ai didi

django - Django中由几个IntegerRangeField组成的Choice字段

转载 作者:行者123 更新时间:2023-11-29 12:04:11 25 4
gpt4 key购买 nike

我正在尝试创建一个模型,其中一个字段应该是年龄字段,但它不是一个简单的数字 (IntegerField),而是需要从几个可用的选项中选择年龄范围 (5-8、8-12、12-18、18-99、5-99)。我正在查看 Choices 的文档,但我什至不确定我是否可以在其中直接使用 IntegerRangeField,所以我得到了这样的结果:

class Person(models.Model):
FIRST_RANGE = IntegerRangeField(blank=True, validators=[MinValueValidator(5), MaxValueValidator(8)])
SECOND_RANGE = IntegerRangeField(blank=True, validators=[MinValueValidator(8), MaxValueValidator(12)])
THIRD_RANGE = IntegerRangeField(blank=True, validators=[MinValueValidator(12), MaxValueValidator(18)])
FOURTH_RANGE = IntegerRangeField(blank=True, validators=[MinValueValidator(18), MaxValueValidator(99)])
FIFTH_RANGE = IntegerRangeField(blank=True, validators=[MinValueValidator(18), MaxValueValidator(99)])

AGE_CHOICES = (
(FIRST_RANGE, '5-8'),
(SECOND_RANGE, '8-12'),
(THIRD_RANGE, '12-18'),
(FOURTH_RANGE, '18-99'),
(FIFTH_RANGE, '5-99'),
)

age = models.IntegerRangeField(blank=True, choices=AGE_CHOICES)

这是正确的做法吗?这对我来说有点尴尬,我正在考虑只使用 Char,尽管我想在最后坚持在这个字段上有一个范围......

谢谢!

最佳答案

来自 Range Fields 的文档在 Django 中:

All of the range fields translate to psycopg2 Range objects in python, but also accept tuples as input if no bounds information is necessary. The default is lower bound included, upper bound excluded.

看来您可以使用元组 来创建选择。

FIRST_RANGE = (5, 8) # here 5 is included and 8 is excluded
# and similarly create the other ranges and then use in AGE_CHOICES

或者,您可以创建 Range 对象。

from psycopg2.extras import Range

FIRST_RANGE = Range(lower=5, upper=8, bounds='[)')
# bounds: one of the literal strings (), [), (], [], representing whether the lower or upper bounds are included

关于django - Django中由几个IntegerRangeField组成的Choice字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35796808/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com