2009-07-02 8 views
1

私はこれを正しい方法で考えているのかどうか分かりません。複数の値を1つの属性に格納する方法

のは、私はこれが含まれているmodels.pyを持っているとしましょう:

class Order(models.Model): 
    customer = models.foreignKey(Customer) 
    total = models.charField(max_length=10) 
    has_shipped = models.booleanField() 

class Product(models.Model): 
    sku = models.charField(max_length=30) 
    price = models.charField(max_length=10) 

今、明らかに順序は製品だけでなく、製品が含まれています。注文に商品を追加する最良の方法は何ですか?私が考えることができる唯一の方法は、 '商品'という「オーダー」に別のフィールドを追加して、その中の各製品のSKVをCSVで埋めていくことです。これは明白な理由から理想的ではありませんが、私はこのようなことはあまりよくしていませんし、よりよい方法が何であるか分かりません。

(などこれは擬似コードで心に留めておくので、スペルミスを気にしない)

答えて

7

あなたが何をしているのは、製品と注文の関係が多岐にわたります。

ような何か:

class Order(models.Model): 
    customer = models.foreignKey(Customer) 
    total = models.charField(max_length=10) 
    has_shipped = models.booleanField() 
    products = models.ManyToManyField(Product) 

はドキュメントherehereを参照してください。

+0

これです。 URLの書式設定が必要な場合があります。 – drozzy

+0

それは良いですか? –

+0

ありがとうございます。私は今日「Python Web Development with Django」を読んでいましたが、その結論に至りましたが、それが正しければ終日を把握しようとしていました。ありがとうございました。 – orokusaki

0

ご注文と商品の間などの多対多の関係にサービスを提供しますもう一つのモデルを作成することができます

このようなもの

class OrderProducts(models.Model) 
    product = models.ForeignKey(Product) 
    order = models.ForeignKey(Order) 
+0

オーダー自体が既に「オーダー・オブ・プロダクト」 – drozzy

+0

として機能しているので、これは冗長ですが、答えにあります。 私はこの答えを書いた時点で、私はちょうどdjangoの型models.ManyToManyFieldを覚えていないので、古典的なソリューションを提案しました。 – tdelev

+0

これは冗長ではありません。将来の価格変動がある場合はどうなりますか?価格変更があって、注文が元の製品にのみ関連していた場合、顧客がどれくらい何​​を支払ったかを知る方法がありません。これにより、注文時に現在の状態の商品を反映させることができます。 – orokusaki

関連する問題