我有一个模型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'
。
我该怎么办呢......
答案 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()
另外,请确保i
和anon_user
有主键。