我应该如何处理类型错误,int()参数必须是字符串或数字?

时间:2013-02-20 06:58:51

标签: django django-models

我有一个模型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 个答案:

答案 0 :(得分:1)

我可以看到您的代码存在各种问题。首先,您使用相同的id来获取您的餐厅 -

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

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

最后,当你初始化你的OrderItem时,你将命令作为一个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()

顺便说一下,你可以用django的get_or_create快捷方式替换你的try / except语句。

答案 1 :(得分:0)

应该链接这个。

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

答案 2 :(得分:0)

您应该使用管理器来正确创建对象,以您实际执行的方式实例化实际上并未实际访问数据库。 Order.objects.create(...)

答案 3 :(得分: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有主键。