gpt4 book ai didi

python - Django - 处理 "enum models"

转载 作者:太空狗 更新时间:2023-10-29 17:48:43 30 4
gpt4 key购买 nike

在 Django 中处理“支持表”有什么最佳实践吗?

我不喜欢 Field.choices,因为它并没有真正强制完整性(它甚至没有创建检查约束),所以我更喜欢创建一个成熟的模型(而且我经常发现我自己在支持表中添加了额外的字段)。

现在,如果我使用一个完整的模型,我想正确的方法是为表内容创建一个初始数据夹具,但是有没有一种“正确的方法”来命名行的实例,比如说.. .

class State(models.Model):
name = model.TextField()

STATES = dict(
NEW=State.objects.get(pk=0),
IN_PROGRESS=State.objects.get(pk=1),
)

...或类似的东西。

使用什么?

最佳答案

如果您指定 choices 属性(当您通过用户表单插入/更新数据时),Django ORM 会检查完整性。

如果数据库支持,您还可以将验证逻辑设置为数据库级别并使用数据库 ENUM 字段。

更新:

class EnumField(models.Field):

def __init__(self, *args, **kwargs):
super(EnumField, self).__init__(*args, **kwargs)
if not self.choices:
raise AttributeError('EnumField requires `choices` attribute.')

def db_type(self):
return "enum(%s)" % ','.join("'%s'" % k for (k, _) in self.choices)

GENDER_MALE = 'm'
GENDER_FEMALE = 'f'
GENDER_CHOICES = (
(GENDER_MALE, 'Male'),
(GENDER_FEMALE, 'Female'),
)


class Person(models.Model):
name = models.CharField(max_length=50)
gender = EnumField(choices=GENDER_CHOICES)

关于python - Django - 处理 "enum models",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9632521/

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