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

3つのモデルを作りたくなかった

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

複雑すぎることを始めたばかりのような気がします..どんなアドバイスもいただければ幸いです:)

4

1 に答える 1

2

3 つのモデルを作成するのに苦労することになると思います。ただし、ShippingMethod (UPS、USPS、FedEx) モデルと ShippingType (Ground、2 Day、3 Day など) を作成し、3 番目のモデルを ShippingMethodType モデルにして、他の 2 つのモデルを次のように結び付けることをお勧めします。

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 に答える