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)

其次,您需要先保存订单,然后才能将其作为外键传递给订单项。否则不会在您的订单上创建主键,因此OrderItem将无法在 ForeignKey 字段中使用它。

最后,当您初始化时,您OrderItem将 order 作为 arg 而不是 kwarg 传递。

您的代码应类似于 -

# 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()

顺便说一句,您可以用您的 try / except 语句替换 django 的get_or_create快捷功能。

于 2013-02-20T07:43:55.360 回答
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 回答
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()

另外,请确保ianon_user拥有主键。

于 2013-02-20T07:33:30.000 回答