django 编写模型字段选择的更好方法?
django better way to write model field choices?
我有一个带有一些 "status" 字段的模型 class,它有一个 choices
选项(每个选项都有自己的业务逻辑)。
根据 Django 网站,应该这样设置选项:
class Order:
STATUS_ACTIVE = 1
STATUS_ENDED = 2
STATUS_CANCELED = 3
ORDER_STATUS_CHOICES = ( (STATUS_ACTIVE, 'Active'),
(STATUS_ENDED, 'Ended'),
(STATUS_CANCELED, 'Canceled'), )
order_status = models.IntegerField(choices=ORDER_STATUS_CHOICES)
order_status2 = models.IntegerField(choices=ORDER_STATUS2_CHOICES)
问题是,我的模型 class 有很多字段的很多选择,这感觉很糟糕,可以以某种方式封装它,但仍然保留这些选择 inside 模型 class ?
我试过使用像
这样的内部 class
class OrderStatus:
STATUS_ACTIVE = 1
STATUS_ENDED = 2
但是从模型内部引用 Order.OrderStatus.STATUS_ACTIVE class 会引发错误。
如果 django 文档告诉您这样做,那不是垃圾邮件,而是人们使用它们的方式。你可以用更少的代码做类似的事情:
STATUS_ACTIVE, STATUS_ENDED, STATUS_CANCELED = range(1, 4)
您可以将这些选择封装在 dict
:
status1 = {'STATUS_ACTIVE': 1,
'STATUS_ENDED': 2,
'STATUS_CANCELED': 3,
'ORDER_STATUS_CHOICES': ( (STATUS_ACTIVE, 'Active'),
(STATUS_ENDED, 'Ended'),
(STATUS_CANCELED, 'Canceled'), )}
order_status = models.IntegerField(choices=status1['ORDER_STATUS_CHOICES'])
order_status2 = models.IntegerField(choices=status2['ORDER_STATUS_CHOICES'])
如果改用它会有什么变化?
ORDER_STATUS_CHOICES = (
(1, 'Active'),
(2, 'Ended'),
(3, 'Canceled')
)
或者这个?
ORDER_STATUS_CHOICES = (
('1', '1-Active'),
('2', '2-Ended'),
('3', '3-Canceled')
)
我有一个带有一些 "status" 字段的模型 class,它有一个 choices
选项(每个选项都有自己的业务逻辑)。
根据 Django 网站,应该这样设置选项:
class Order:
STATUS_ACTIVE = 1
STATUS_ENDED = 2
STATUS_CANCELED = 3
ORDER_STATUS_CHOICES = ( (STATUS_ACTIVE, 'Active'),
(STATUS_ENDED, 'Ended'),
(STATUS_CANCELED, 'Canceled'), )
order_status = models.IntegerField(choices=ORDER_STATUS_CHOICES)
order_status2 = models.IntegerField(choices=ORDER_STATUS2_CHOICES)
问题是,我的模型 class 有很多字段的很多选择,这感觉很糟糕,可以以某种方式封装它,但仍然保留这些选择 inside 模型 class ?
我试过使用像
这样的内部 classclass OrderStatus:
STATUS_ACTIVE = 1
STATUS_ENDED = 2
但是从模型内部引用 Order.OrderStatus.STATUS_ACTIVE class 会引发错误。
如果 django 文档告诉您这样做,那不是垃圾邮件,而是人们使用它们的方式。你可以用更少的代码做类似的事情:
STATUS_ACTIVE, STATUS_ENDED, STATUS_CANCELED = range(1, 4)
您可以将这些选择封装在 dict
:
status1 = {'STATUS_ACTIVE': 1,
'STATUS_ENDED': 2,
'STATUS_CANCELED': 3,
'ORDER_STATUS_CHOICES': ( (STATUS_ACTIVE, 'Active'),
(STATUS_ENDED, 'Ended'),
(STATUS_CANCELED, 'Canceled'), )}
order_status = models.IntegerField(choices=status1['ORDER_STATUS_CHOICES'])
order_status2 = models.IntegerField(choices=status2['ORDER_STATUS_CHOICES'])
如果改用它会有什么变化?
ORDER_STATUS_CHOICES = (
(1, 'Active'),
(2, 'Ended'),
(3, 'Canceled')
)
或者这个?
ORDER_STATUS_CHOICES = (
('1', '1-Active'),
('2', '2-Ended'),
('3', '3-Canceled')
)