如何在Django模型中为预定义选项设置多对多关系?

时间:2012-03-14 04:58:31

标签: django

我有一个WorderOrder类,它有预定义的工单类型:

class WorkOrder( models.Model ) :
    WORK_TYPE_CHOICES = (
        ( 'hc', 'Heating and cooling' ),
        ( 'el', 'Electrical'          ),
        ( 'pl', 'Plumbing'            ),
        ( 'ap', 'Appliances'          ),
        ( 'pe', 'Pests'               ),
        ( 'ex', 'Exterior'            ),
        ( 'in', 'Interior'            ),
        ( 'ot', 'Others'              ),
    )

    work_type = models.CharField( max_length = 2, choices = WORK_TYPE_CHOICES )
    vendor    = models.ForeignKey( Vendor, null = True, blank = True )

因此,每个订单必须具有一个工单类型。不久后,供应商也可以分配到工作单。

我希望Vendor类与WorkOrder类中的相同的工单选择建立M2M关系。换句话说,每个供应商都能够执行一种或多种工作类型。例如,Bob的Plumbing只能做“Plumbing”,而Solid Home Repair可以做“电气”,“管道”,“外部”和“内部”。

我知道我可以创建另一个名为WorkType的表并使用来自WorkOrder的外键和来自Vendor的M2M,但因为我觉得我不会改变工作类型的选择,我宁愿在models.py预定义它们。

此外,如果我可以在models.py中预定义它,那么我不必在部署和升级期间预先填充表WorkType

1 个答案:

答案 0 :(得分:1)

为您提供的一些选择:

  1. 为work_type_choices创建模型,实例化记录(hc,el等),然后使用manytomany字段,或

  2. 创建一个字段并将CSV值保存(例如:“hc,el”),根据需要将值拆分/加入其元素,或

  3. 将上述字段和函数封装到自定义字段中并使用

  4. 利用其他人的代码段,例如: http://djangosnippets.org/snippets/1200/