2013-08-05 84 views
0

我正在尋找建立一個航運表的Django模型結構的建議,你能幫忙嗎?我想那種簡單。這是我想要存儲的東西:Django Simple Shipping模式正確嗎?

 | Fedex   | UPS   | USPS 
------------------------------------------------------------------ 
GROUND | Home Delivery | Ground  | Parcel Select 
3DAY | Express Saver | 3 Day Select | Priority or First Class 
2DAY | 2Day   | 2nd Day Air | Priority or First Class 
etc  | ..    | ..   | .. 

我想創建一個模型(或多個)出這些,但我覺得我只是創造一個爛攤子,我的想法完全失敗了。這裏是我的思想,我不是滿意呢:

class ShippingMethod(models.Mod 
    title = models.CharField(
        max_length = 20, 
        choices = SHIPPING_TITLES, # Just a list of Fedex/UPS etc 
        default = "fedex" 
        ) 
    service = models.CharField(
        max_length = 20, 
        choices = SHIPPING_SERVICES, # Just a list of Ground, 2day, etc 
        default = "GROUND" 

    # This model is lacking the "Description", eg: "Parcel Select, 2nd Day Air". 

我不想使三種模型

ShippingMethod -- UPS, USPS, Fedex 
ShippingType -- Ground, 2Day 
ShippingDescription -- "Parcel Select, 2nd Day Air" 

我覺得像我剛開始過於複雜的事情。任何意見將不勝感激:)

+0

我想你想要一個單獨的模型(類似'shipping')4個CharFields,'name','FedEx','UPS'和'USPS'。如果這不正確,那麼我不明白你想要做什麼。 –

回答

2

我會想象你會卡住製作三個模型。不過,我建議您製作您的ShippingMethod(UPS,USPS,FedEx)模型和ShippingType(地面,2天,3天等),然後將第三個模型與另外兩個模型綁定,如:

ShippingMethodType(models.Model): 
    shipping_method = ForeignKey(ShippingMethod) 
    shipping_type = ForeignKey(ShippingType) 

通過這種方式,您可以顯示ShippingMethodType以選擇哪種方法和類型的組合,以及它爲託運方調用的內容。這是我會怎麼做,我想不出任何更優雅的方式,這比其他的可能性:

from django.db import models 

Shipper(models.Model) 
    name = models.CharField(max_length=16) 
    . 
    . 
    ground = models.CharField(max_length=16) 
    two_day = models.CharField(max_length=16) 
    three_day = models.CharField(max_length=16) 
    . 
    . 
    def shipPackage(self): 
     . 
     <some default functionality for all shippers> 
     . 

ShipperUPS(Shipper): 
    . 
    <any UPS-specific fields> 
    . 
    . 
    def shipPackage(self): 
     . 
     <UPS-specific functionality> 
     super(Shipper, self).shipPackage() 

ShipperUSPS(Shipper): 
    . 
    . 
    <overloaded USPS methods> 

ShipperFedEx(Shipper): 
    . 
    . 
    <overloaded FedEx methods> 

像這樣的東西可以派上用場,或者可能是矯枉過正,這取決於您的要求。但是,我不認爲你可以逃避不使用多個模型。

+0

我認爲你是對的,那就是我想要避免的,但它是唯一的方法! – JREAM