1

私はモデルを持っています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)

オブジェクトを作成する関数でこれを行っています。

try:
   order= Order.objects.get(pk=id)
   restaurant = Restaurant.objects.get(pk=id)
except:
   order = Order(created_by=anon_user,modified_by=anon_user)

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

エラーが発生しますint() argument must be a string or a number, not 'Order'。これどうしようかな..

4

4 に答える 4

1

コードにさまざまな問題があります。まず、注文を受け取るのと同じものを使用しidてレストランを取得します-

   order= Order.objects.get(pk=id)
   restaurant = Restaurant.objects.get(pk=id)

次に、注文アイテムに外部キーとして渡す前に、注文を保存する必要があります。そうしないと、注文時に主キーが作成されないため、OrderItemForeignKeyフィールドで使用できなくなります。

最後に、初期化するOrderItemと、順序をkwargではなくargとして渡します。

コードは次のようになります-

# get order_id and restaurant_id
try:
   order= Order.objects.get(pk=order_id)
   restaurant = Restaurant.objects.get(pk=restaurant_id)
except:
   order = Order(created_by=anon_user,modified_by=anon_user)
   order.save()
oi=OrderItem(order=order,shopping_id=_shopping_id(request),
             quantity=quantity,
             item=i,
             created_by=anon_user,
             modified_by=anon_user)
oi.save()

余談ですが、djangoのget_or_createショートカット関数の代わりにtry/exceptステートメントを使用できる場合があります。

于 2013-02-20T07:43:55.360 に答える
0

この行 -

order = Order(created_by=anon_user,modified_by=anon_user)

クラスのインスタンスを作成しますがOrder、データベースには保存されず、 を呼び出さない限り、他のモデルが関係を保存するために使用できる主キーが関連付けられていませんorder.save()。したがって、 を呼び出す必要がありますorder.save()。そして、同様のものを作成しますOrderItem-

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

また、主キーがあることを確認iしてください。anon_user

于 2013-02-20T07:33:30.000 に答える
0

これをリンクする必要があります。

oi=OrderItem.objects.create( shopping_id=_shopping_id(request),
                           quantity=quantity,
                           item=i,
                           order=order,
                           created_by=anon_user,
                           modified_by=anon_user)
于 2013-02-20T07:05:39.090 に答える
0

オブジェクトを適切に作成するには、おそらくマネージャーを使用する必要があります。クラスをインスタンス化する方法は、実際にはデータベースにヒットしません。Order.objects.create(...)

于 2013-02-20T07:06:23.840 に答える