当前位置: 首页 > 知识库问答 >
问题:

ValueError:在使用多对多关系之前,需要为字段id设置一个值[重复]

公冶弘壮
2023-03-14

我正在做一个像电子商务网站这样的项目。到目前为止,一切正常,但如果用户购物车/包中没有任何内容,则会发生错误。我试过保存方法,但我想我做错了什么。有人能帮我解决吗

views.py

def your_cart(request):
    user = User.objects.getFromUser(request.user)
    order = models.Order.objects.filter(owner = user, is_ordered = False)
    if (len(order)==0):
        order = models.Order()
        order.owner = user
    else:
        order = order[0]
    items = order.items.all()
    if request.method == 'POST':
        demand_date = request.POST.get('demand_date')
        demand_date_obj = datetime.strptime(demand_date,"%m/%d/%Y %I:%M %p")
        order.demand_date = localtime.localize(demand_date_obj)
        order.save()
    return render(request, "Inventory/client_inventory/checkout.html", {'items':items})

模型。派克

class Order(models.Model):
    owner = models.ForeignKey('user.User', on_delete=models.SET_NULL, null=True)
    is_empty = models.BooleanField(default=True)
    is_ordered = models.BooleanField(default=False)
    items = models.ManyToManyField(OrderItem)
    date_ordered = models.DateTimeField(auto_now_add=True)
    pickup_date = models.DateTimeField(blank=True, null=True)
    pickup_place = models.CharField(max_length=100,default='')
    description = models.CharField(max_length=100,default='')
    is_approved = models.BooleanField(default=False)
    is_returned = models.BooleanField(default=False)
    demand_date = models.DateTimeField(blank=True, null=True)
    def get_cart_items(self):
        return self.items.all()
    def __str__(self):
        return '{0}'.format(self.owner)
    def dict(self):
        return {
            'id':self.id,
            'owner':self.owner,
            'date_ordered':self.date_ordered.isoformat() if self.date_ordered != None else '',
            'is_approved':'Approved' if self.is_approved == True else 'Declined',
            'pickup_date':self.pickup_date.isoformat() if self.pickup_date != None else '',
            'pickup_place':self.pickup_place,
            'description':self.description,
            'is_returned':self.is_returned,
            'demand_date':self.demand_date.isoformat() if self.demand_date != None else '',
        }

错误和回溯

"<Order: admin>" needs to have a value for field "id" before this many-to-many relationship can be used.

    Environment:


Request Method: GET
Request URL: http://127.0.0.1:8000/modules/smart_inventory/homepage/checkout

Django Version: 2.2.3
Python Version: 3.7.6
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'authentication',
 'home',
 'modules.user',
 'modules.module_manager',
 'modules.exampleapp',
 'modules.smartInventory']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']



Traceback:

File "/Users/krtp/.pyenv/versions/3.7.6/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/core/handlers/exception.py" in inner
  34.             response = get_response(request)

File "/Users/krtp/.pyenv/versions/3.7.6/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/core/handlers/base.py" in _get_response
  115.                 response = self.process_exception_by_middleware(e, request)

File "/Users/krtp/.pyenv/versions/3.7.6/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/core/handlers/base.py" in _get_response
  113.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/Users/krtp/.pyenv/versions/3.7.6/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/contrib/auth/decorators.py" in _wrapped_view
  21.                 return view_func(request, *args, **kwargs)

File "/Users/krtp/Desktop/Services_PublicVersion/modules/smartInventory/views_client.py" in your_cart
  41.     items = order.items.all()

File "/Users/krtp/.pyenv/versions/3.7.6/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/db/models/fields/related_descriptors.py" in __get__
  527.         return self.related_manager_cls(instance)

File "/Users/krtp/.pyenv/versions/3.7.6/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/db/models/fields/related_descriptors.py" in __init__
  840.                                  (instance, self.pk_field_names[self.source_field_name]))

Exception Type: ValueError at /modules/smart_inventory/homepage/checkout
Exception Value: "<Order: admin>" needs to have a value for field "id" before this many-to-many relationship can be used.

先谢谢你。

共有1个答案

祝叶五
2023-03-14

这里的问题是,当用户下的Order对象为none时,您试图处理这种情况。多对多关系要求对象位于db中。ie当用户下的订单为空时,您要么必须保存它,要么应该使用create()而不是声明订单对象。

或者你可以试试这个

if (len(order)==0):
    order = models.Order()
    order.owner = user
    order.save()
else:
    order = order[0]
 类似资料:
  • 我目前有以下3种型号 现在我正试图以这种方式将值插入 我得到了错误 我看了这篇文章,但仍然无法找出问题所在。对此,如果有任何建议,我将不胜感激。

  • 我正在尝试将团队添加到数据库中,但出现此错误。看了类似的问题,但没有一个解决了我的问题。(我是Django的新手) 我的代码看起来像: 形式。派克 模型。派克 意见。派克 当我尝试不使用表单时,例如仅使用标题字段: 它是成功地添加它。我在这里做错了什么?

  • 保存表单时,我遇到以下错误:“”需要为字段“surveythread”设置一个值,然后才能使用此多对多关系。 模型。py: views.py: forms.py 错误消息: 回溯: 我是Django和Python的新手。如果需要,我可以发布调试跟踪或迁移文件,但我觉得这是一个简单的修复。显然,关键是我想为每个调查结果保存多个调查线程。 谢谢!

  • Car对象只是典型的JPA对象,没有对驱动程序的反向引用。 所以我试图通过这个来实现的是: 我可以使用详细的JSON视图阅读完整的汽车说明 或者我可以只读取汽车的Id,简写为jsonview 最重要的是,在创建新的驱动程序时,我只想传入汽车的JSON ID。这样,我就不需要在persist期间对Car进行不确定的读取,而只需要更新ID。 谢谢你。 更新:忘记了,我在创建驱动程序时通过的汽车的ID是

  • 问题内容: 我有一个现有菜单,可以为您提供选项或。应该加载文件的内容并显示它。 但是,当我尝试运行此命令时,出现错误: 名称,成人,孩子= line.split(’,’) ValueError:需要多个值来解压 为什么会出现此错误? 问题答案: 这意味着其中有一条线,当您删除空格并按逗号分割时,不会精确地给出三段。实际上,它似乎只提供了1个(“需要多于1个值才能解压缩”),这表明一行完全没有逗号。

  • 我的实体之间存在多对多关系:和。当我想在我的Symfony项目中将添加到订单时,我总是收到以下错误消息: 属性“suppliers”在类“Acme\AppBundle\Entity\PurchaseOrder”中不是公共的。也许您应该创建方法“setSuppliers()”? 当我自己在Entity中创建函数时: 我收到以下错误消息: 可捕获的致命错误:传递给Doctrine\通用\集合\Arra