2012-03-14 83 views
1

我有一個WorderOrder類具有預定義的工單類型:如何在Django模型中爲預定義的chocies設置多對多關係?

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's Plumbing只能做「水暖」,而Solid Home Repair可以做「Electrical」,「Plumbing」,「Exterior」和「Interior」。

我明白我可以創建一個名爲WorkType另一個表,並使用從WorkOrder外鍵和M2M從Vendor,但因爲我覺得我不會改變作業方式的選擇,我寧願他們models.py預定義。

另外,如果我可以在models.py中預定義它,那麼在部署和升級過程中,我不必預先填充表WorkType

+0

難道一個工單搞一個供應商做了一些WorkTypes的?那將是一對多,不是很多,不是嗎? – 2012-03-14 05:12:29

+0

@John Mee Ummm不知道如何回答你的問題。讓我試着澄清一下:每個WorkOrder都有一個WorkType。每個供應商都有許多WorkType。這有幫助嗎? – hobbes3 2012-03-14 05:25:40

回答

1

你一些選項:

  1. 創建work_type_choices一個模型,實例化記錄(HC,EL等),然後使用一個多對多字段,或者

  2. 創建charfield和保存CSV值到它(例如:「HC,EL」),劈裂/加入值到它的元素作爲必需的,或

  3. encapsule上述charfield和功能集成到一個自定義字段,並使用該

  4. 利用別人的片段,例如: http://djangosnippets.org/snippets/1200/

+0

嗯,我喜歡選項#1。我應該在'models.py'中實例化記錄並確保它只運行一次?對於在何處實例化記錄,您有什麼建議? – hobbes3 2012-03-14 18:50:30

+1

https://docs.djangoproject.com/zh/dev/howto/initial-data/ – 2012-03-15 01:32:40

+0

夾具記錄,或者我想我也做了這種事情與應用程序中的保存列表__init__.py – 2012-03-15 01:35:27