我有一个模型类,其中包含一些" status"字段,具有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 OrderStatus:
STATUS_ACTIVE = 1
STATUS_ENDED = 2
但是从模型类中引用Order.OrderStatus.STATUS_ACTIVE会引发错误。
答案 0 :(得分:1)
如果django doc告诉你这样做,那不是垃圾邮件,而是人们如何使用它们。你可以用更少的代码做类似的事情:
STATUS_ACTIVE, STATUS_ENDED, STATUS_CANCELED = range(1, 4)
答案 1 :(得分:1)
您可以将这些选项封装在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'])
答案 2 :(得分:0)
如果您改用它会有什么变化?
ORDER_STATUS_CHOICES = (
(1, 'Active'),
(2, 'Ended'),
(3, 'Canceled')
)
还是这个?
ORDER_STATUS_CHOICES = (
('1', '1-Active'),
('2', '2-Ended'),
('3', '3-Canceled')
)