2017-07-14 7 views
0

私は既存のモデルクラスを分割しようとしています。元のクラスは最適ではないので、CustomerOrderからすべての顧客関連情報を新しいクラスCustomerに移動したいと考えています。 Djangoでこれを行う最善の方法は何ですか?django models.py - あるモデルクラスから別のモデルクラスに移行する

旧モデルクラス:

class CustomerOrder(models.Model): 

    # Customer information fields 
    first_name = models.CharField(max_length=200)  # Customer first name 
    last_name = models.CharField(max_length=200)  # Customer last name 
    email = models.EmailField()     # Customer email address 
    address = models.CharField(max_length=255)  # Address to deliver (e.g. 1532 Commonwealth St. Apt 302) 
    city = models.CharField(max_length=200)   # City to deliver (e.g. Fullerton, CA 92014) 

    # Order information fields 
    note = models.TextField()   # Any notes the customer may have about shipping 
    shipping_method = models.CharField(max_length=200)  # Shipping in LA or OC 
    total_price = models.FloatField(default=0)    # Total price of the order 
    delivery_date = models.DateField() # When to deliver the order. Order is "live" until the next 
          # day after delivery. So if delivery date is Jan 3, it's "live" until Jan 4. 

    order_date = models.DateField()  # When the customer ordered 
    time_slot = models.CharField(max_length=200)   # What time to deliver the product 
    is_cancelled = models.BooleanField(default=False)  # If the order is cancelled or refunded, we mark it here. 

    created_at = models.DateTimeField(auto_now_add=True) # When the order entry was saved into database 
    updated_at = models.DateTimeField(auto_now=True)  # When the order was last updated in database 

    def __str__(self): 
     return self.first_name + " " + self.last_name 

新モデルクラス:

class Customer(models.Model): 
    first_name = models.CharField(max_length=200)  # Customer first name 
    last_name = models.CharField(max_length=200)  # Customer last name 
    email = models.EmailField()     # Customer email address 
    address = models.CharField(max_length=255)  # Address to deliver (e.g. 1532 Commonwealth St. Apt 302) 
    city = models.CharField(max_length=200)   # City to deliver (e.g. Fullerton, CA 92014) 

私は同様にそれらを削除したいので、古いモデルでの重複があります。

+0

質問に不可欠な内容へのリンクは避けてください。 365日以内にあなたの質問は役に立たなくなるでしょう。リンクの内容をあなたの質問にコピーしてください。 – thebjorn

+0

よく検討されたデータモデルについては、http://www.databaseanswers.org/data_models/を参照してください。多分この1つです:http://www.databaseanswers.org/data_models/e_commerce/index.htm – thebjorn

+0

私はリンクを削除するように更新しました – JoshGumby87

答えて

0

データベースの種類によって異なります。 read this

データが失われないように注意してください。

+0

postgresqlを実行しています – JoshGumby87

+0

そのチュートリアル(添付リンク)を読むことをお勧めします – pooya

+0

私の元のモデルクラス(このプロジェクトを継承しました)が適切に構造化されていませんでした。私は基本的に、特定のモデルフィールドからデータを取り出して、それらを新しいより正確なモデルクラスに移す必要がありました。それはよりきれいに見え、私の古いデータを維持することができました。ありがとう! – JoshGumby87

0

質問は、リレーショナルデータベースのスキーマ全体と関係していると思います。

私はあなたが持っている新しいCustomerOrder(顧客の名前を変更する)クラスのように、すべての顧客関連のものを1つのテーブルに入れてから、Ordersの別のクラスを作成して1対多の関係にリンクします。たとえば、1人の顧客が多くの注文を行うことができます。あなたは、多くの関係に、このいずれかを実装したい場合は、単に注文のクラスに次の行を追加します。

class Order(models.Model): 
    # The relavant order fields which you require, i.e. order number etc. 
    customer = models.ForeignKey(Customer, on_delete=models.CASCADE) 

を今、あなたは新しい秩序のインスタンスを作成するとき、あなたは顧客を割り当てることができます。 p.s.あなたは基本的にcustomer.order_set()メソッドを実行します(顧客は多くの注文を行うことができます)。

+0

はい私は注文クラスを持っているという意図でスキーマ全体をやり直しています – JoshGumby87

+0

その場合、CustomerクラスとOrderクラスの両方の要件を収集し、2つの別個のテーブルを用意し、 –

+0

古いCustomerOrderクラスから完全に移動しようとしています。私はこのold_name = CustomerOrder.first_nameのような何かをすることができますか? new_name =顧客(first_name = old_name) – JoshGumby87

関連する問題