首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >处理valueError

处理valueError
EN

Stack Overflow用户
提问于 2013-01-11 16:38:26
回答 1查看 169关注 0票数 0

我很难修复一个valueError,'OrderItem' instance needs to have a primary key value before a many-to-many relationship can be used.我知道我必须用.add()做点什么,但我不知道怎么做。这是OrderItem model

代码语言:javascript
运行
复制
class OrderItem(SmartModel):
    order_id = models.CharField(max_length=50,db_index=True)
    date_added = models.DateTimeField(auto_now_add=True)
    quantity = models.IntegerField(default=0)
    item = models.ManyToManyField(Item)

    class Meta:
        db_table='order_items'

        def __unicode__(self):
            return "%s" % (self.order_id)

这是我在视图中做的事情,

代码语言:javascript
运行
复制
def add_to_order(request):  
    postdata = request.POST.copy()
    #get item slug from post data, return blank if empty
#   item_slug = postdata.get('item_slug','')
    #get quantity added, return 1 if empty
    quantity = postdata.get('quantity',0)
    # fetch the item or return  missing page error_message
    i = get_object_or_404(Item)
    # get items in order
    order_items = get_order_items(request)
    item_in_orders = False
    # check to see if item is already in order
    for order_item in order_items:
        if order_item.item.id == i.id:
            #update the quantity if found
            order_item.augment_quantity(quantity)
            item_in_orders = True
    if not item_in_orders:
        # creat and save a new order item
        oi = OrderItem()
        oi.item = i
        oi.quantity = quantity
        oi.order_id = _order_id(request)
        oi.save()

下面是回溯:

代码语言:javascript
运行
复制
Traceback:
File "/home/mats-invasion/projects/f4l/env/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
  111.                         response = callback(request, *callback_args, **callback_kwargs)
File "/home/mats-invasion/projects/f4l/f4l/live/views.py" in get_category
  25.           order.add_to_order(request)
File "/home/mats-invasion/projects/f4l/f4l/cart/order.py" in add_to_order
  48.       oi.item = i
File "/home/mats-invasion/projects/f4l/env/local/lib/python2.7/site-packages/django/db/models/fields/related.py" in __set__
  832.         manager = self.__get__(instance)
File "/home/mats-invasion/projects/f4l/env/local/lib/python2.7/site-packages/django/db/models/fields/related.py" in __get__
  819.             through=self.field.rel.through,
File "/home/mats-invasion/projects/f4l/env/local/lib/python2.7/site-packages/django/db/models/fields/related.py" in __init__
  536.                 raise ValueError("%r instance needs to have a primary key value before a many-to-many relationship can be used." % instance.__class__.__name__)

Exception Type: ValueError at /menu/
Exception Value: 'OrderItem' instance needs to have a primary key value before a many-to-many relationship can be used.

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2013-01-11 17:13:22

更新视图代码以将新项添加为

代码语言:javascript
运行
复制
if not item_in_orders:
    # creat and save a new order item
    oi = OrderItem()
    oi.quantity = quantity
    oi.order_id = _order_id(request)
    oi.save()
    #save oi first, then add i to item
    oi.item.add(i)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14274381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档