django更好的方法来写模型字段选择?

6yoyoihd  于 2023-01-06  发布在  Go
关注(0)|答案(3)|浏览(113)

我有一个包含一些“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会引发错误。

nzrxty8p

nzrxty8p1#

您可以将这些选项封装在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'])
ne5o7dgx

ne5o7dgx2#

如果django doc告诉你这么做,那就不是垃圾邮件,而是人们如何使用它们。你可以用更少的代码来做类似的事情:

STATUS_ACTIVE, STATUS_ENDED, STATUS_CANCELED = range(1, 4)
n8ghc7c1

n8ghc7c13#

如果您改用此选项,会发生什么变化?
第一个月
或者这个?
ORDER_STATUS_CHOICES = ( ('1', '1-Active'), ('2', '2-Ended'), ('3', '3-Canceled') )

相关问题