我正在做一个像电子商务网站这样的项目。到目前为止一切正常,但如果用户购物车/购物袋中没有任何内容,则会发生错误。 我尝试过保存方法,但我认为我做错了什么。有人能帮我解决这个问题吗
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})
models.py
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.
先谢谢你
这里的问题是,当用户下没有订单对象时,您试图处理这种情况。 多对多关系要求对象位于db中。ie当用户下的订单为空时,您要么必须保存它,要么应该使用create(),而不是声明Order对象
或者你可以试试这个
相关问题 更多 >
编程相关推荐