0

と の 2 つのモデルがOrderありOrderItemます。

class OrderItem(SmartModel):
    shopping_id = models.CharField(max_length=50,db_index=True)
    quantity = models.IntegerField(default=0)
    item = models.ForeignKey(Item)
    order = models.ForeignKey(Order)

OrderItemこれは、オブジェクトを作成して保存する方法です

if not item_in_orders:
        # creat and save a new order item
        anon_user = User.objects.get(id=settings.ANONYMOUS_USER_ID) 
        try:
            order= Order.objects.get(pk=order_id)
        except:
            order = Order.objects.create(created_by=anon_user,modified_by=anon_user)

        oi=OrderItem.objects.create(order=order,shopping_id=_shopping_id(request),
                                          quantity=quantity,
                                          item=i,
                                          created_by=anon_user,
                                          modified_by=anon_user)
        oi.save()

OrderItemここで、上記のオブジェクトはオブジェクトの前に作成されることに言及する必要がありOrderます。

class Order(SmartModel):
    email = models.EmailField(max_length=50,help_text="Needed as alternative")
    mobile = PhoneNumberField(max_length=20,default='+2507####')
    billing_name= models.CharField(max_length=50)
    billing_address= models.CharField(max_length=50)    
    billing_city = models.CharField(max_length=50)

両方のモデルは ModelForms であり、2 つが作成されると、データベース内の 2 つの行がOrder. 取り込まれていない最初の行は、OrderItem の作成時にこのコードによって作成されたと思われます。

order = Order.objects.create(created_by=anon_user,modified_by=anon_user)

            oi=OrderItem.objects.create(order=order,shopping_id=_shopping_id(request),
                                              quantity=quantity,
                                              item=i,
                                              created_by=anon_user,
                                              modified_by=anon_user)
            oi.save()

Orderオブジェクトを保存すると2行目が作成され、問題ありません。

OrderItemOrder前者で、後者は前者の外部キー フィールドであることに注意してください。

私のdjangoアプリの要件は、顧客(私の場合Order)が提供される前に注文項目が作成されることです。他のアイデアは大歓迎です。

4

3 に答える 3

0
order = Order.object.create(
    created_by=anon_user, 
    modified_by=anon_user
    )


OrderItem.object.create(
    order = order, 
    shopping_id = _shopping_id(request),
    quantity=quantity,
    item=i,
    created_by=anon_user,
    modified_by=anon_user
    )

//To access the order after saving the above info
//For example:

order.email = 'anyone@gmail.com'
order.save()
于 2013-02-28T11:29:31.407 に答える
0

あなたのように見えます

  1. OrderItem で保存する空白の注文を作成する (外部キーを満たすため)
  2. OrderItem を作成した後、完全に入力された別の Order を作成します (OrderItem の後に Order が作成されると言及しているため)。これは上記のコードには表示されていないと思います。

これが、2 つの Order インスタンスが作成されている理由です。

2 度目に新しい注文を作成する (ステップ 2) 代わりに、ステップ 1 で作成した注文を、電子メール、住所などの注文情報で更新して保存することができます。

編集:詳細なハウツーを追加しました...

2 番目の Order を作成しているコード内の場所があります。そこに新しい Order を作成する代わりに、ステップ 1 で作成した Order への参照 (投稿したコードの order 変数) を使用し、利用可能になったら電子メールと住所の情報で更新し、save() を呼び出します。これにより、新しいインスタンスが作成される代わりに、データベース内の順序が更新されます。

于 2013-02-28T11:29:25.020 に答える
0

あなたが言ったようにOK

OrderItem は Order の前に作成され、後者は前者の外部キー フィールドであることに注意してください。

次に、この場合、モデルを次のように設計する必要があります

class OrderItem(SmartModel):
    shopping_id = models.CharField(max_length=50,db_index=True)
    quantity = models.IntegerField(default=0)
    item = models.ForeignKey(Item)
    order = models.ForeignKey(Order,blank=True,null = True)

Foreign keyここで、テーブルの値を保存する方法を説明します

クエリで

order = Order.objects.create(created_by=anon_user,modified_by=anon_user)

            oi=OrderItem.objects.create(order=order,shopping_id=_shopping_id(request),
                                              quantity=quantity,
                                              item=i,
                                              created_by=anon_user,
                                              modified_by=anon_user)
            oi.save()

何が何であるかわかりませんi が、外部キーを保存する場合は、次i のインスタンスが必要ですItem

itemname 最初に from フォームを取得している場合、それを table でフィルタリングする必要があると仮定する簡単な例を想定していItem ます。

お気に入り getitem = Item.objects.get(name= itemname)

そして、次のように外部キーを保存できます

order = Order.objects.create(created_by=anon_user,modified_by=anon_user)

            oi=OrderItem.objects.create(order=order,shopping_id=_shopping_id(request),
                                              quantity=quantity,
                                              item=getitem,
                                              created_by=anon_user,
                                              modified_by=anon_user)
            oi.save()
于 2013-02-28T11:21:48.630 に答える