2013-02-20 44 views
1

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

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'。 我应该如何去了解这个..

+0

你也应该只捕获DoesNotExist - >除了:Order.DoesNotExist,Restaurant.DoesNotExist – Jannis 2013-02-20 10:11:48

回答

1

我可以看到你的代码的各种问题。首先你使用相同id,让您的餐厅,你是让您的订单 -

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

其次,您需要保存订单之前,你可以把它作为一个外键订单项目。否则就不会有您的订单上创建一个主键,所以OrderItem将无法​​在ForeignKey的领域使用它。

最后,当你初始化OrderItem你传递顺序为ARG而非kwarg。

你的代码应该是这个样子 -

​​

顺便说一句,你也许能substitue你的try /除了Django的​​快捷功能的语句。

+0

对不起,我没有回到这些早些时候..但它的工作,并感激..谢谢你。 – 2013-02-20 09:25:57

+0

没问题,很乐意帮忙。 – 2013-02-20 09:32:03

0

应该链接这一点。

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

谢谢,但这不起作用, – 2013-02-20 07:15:15

+0

你是否得到相同的错误? – 2013-02-20 07:33:05

+0

没有我得到'ORDER_ID不能null.'你知道 – 2013-02-20 09:16:22

0

您应该使用管理器来正确创建对象,实例化类的方式并不实际触及数据库。 Order.objects.create(...)

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有主键。

+0

这是我做的...我只是在这里显示了几行代码.sorry – 2013-02-20 09:18:46

+0

如果您需要帮助,请显示代码。 – 2013-02-20 09:31:42

相关问题