0

我正在寻找有关为运输表创建 Django 模型结构的建议,您能帮忙吗?我想要一种简单的..这是我想要存储的东西:

        | 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"

我觉得我刚刚开始过于复杂的事情..任何建议将不胜感激:)

4

1 回答 1

2

我想你会被困在制作三个模型。但是,我建议将您的 ShippingMethod(UPS、USPS、FedEx)模型和您的 ShippingType(Ground、2 天、3 天等)模型制作为 ShippingMethodType 模型,该模型将其他两个模型联系起来,例如:

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>

像这样的东西可能会派上用场,或者可能是矫枉过正,这取决于您的规格。但是,我认为你不能不使用多个模型而侥幸逃脱。

于 2013-08-05T22:16:30.830 回答