python - /order 'OrderClass' 对象的 AttributeError 在视图内的 for 循环中没有属性 'item'
问题描述
我找不到这个问题的解决方案。我是 Django 的新手,我正在创建一个包含此模型文件的 Web 应用程序
class CardItem(models.Model):
user = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)
item = models.ForeignKey(MenuItem, on_delete=models.CASCADE, related_name="cart")
addons = models.TextField(blank=True)
toppings = models.TextField(blank=True)
def __str__(self):
return f"{self.user} - {self.item} {self.addons} {self.toppings}"
class Status(models.Model):
name = models.CharField(max_length=100)
description = models.TextField(blank=True)
def __str__(self):
return f"{self.name}: {self.description}"
class OrderClass(models.Model):
plates = models.ManyToManyField(CardItem)
status = models.ForeignKey(Status, on_delete=models.CASCADE)
price = models.DecimalField(max_digits=6, decimal_places = 2)
def __str__(self):
return f"{self.item} Status: {self.status}"
在我的视图文件中:
def order(request):
if request.method == 'POST':
items = CardItem.objects.filter(user = request.user)
price = request.POST.get("totalPrice")
new_order = OrderClass()
new_order.price = price
for i in items:
top = request.POST.getlist(str(i.id) + "topping")
add = request.POST.getlist(str(i.id) + "addon")
i.toppings = str(top)
i.addons = str(add)
i.save()
print(i)
new_order.plates.add(i)
i.save() 正在工作,当我打印 i 时,我得到一个 CardItem,但是,在 new_orde.plates.add(i) 中我得到这个错误:
/order 'OrderClass' 对象的 AttributeError 没有属性 'item'
追溯:
Environment:
Request Method: POST
Request URL: http://127.0.0.1:8000/order
Django Version: 3.0.7
Python Version: 3.8.2
Installed Applications:
['orders.apps.OrdersConfig',
'users.apps.UsersConfig',
'crispy_forms',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles']
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 (most recent call last):
File "/home/juancopi81/project3/project3_env/lib/python3.8/site-packages/django/core/handlers/exception.py", line 34, in inner
response = get_response(request)
File "/home/juancopi81/project3/project3_env/lib/python3.8/site-packages/django/core/handlers/base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/home/juancopi81/project3/project3_env/lib/python3.8/site-packages/django/core/handlers/base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/juancopi81/project3/orders/views.py", line 80, in order
new_order.plates.add(i)
File "/home/juancopi81/project3/project3_env/lib/python3.8/site-packages/django/db/models/fields/related_descriptors.py", line 535, in __get__
return self.related_manager_cls(instance)
File "/home/juancopi81/project3/project3_env/lib/python3.8/site-packages/django/db/models/fields/related_descriptors.py", line 846, in __init__
raise ValueError('"%r" needs to have a value for field "%s" before '
File "/home/juancopi81/project3/project3_env/lib/python3.8/site-packages/django/db/models/base.py", line 518, in __repr__
return '<%s: %s>' % (self.__class__.__name__, self)
File "/home/juancopi81/project3/orders/models.py", line 71, in __str__
return f"{self.item} Status: {self.status}"
Exception Type: AttributeError at /order
Exception Value: 'OrderClass' object has no attribute 'item'
- - - 编辑 - - - - - - -
按照@PankajSharma 的建议在我的模型中更改 return f"{self.item} Status: {self.status}" 后,我得到:超出最大递归深度
Traceback (most recent call last):
File "/home/juancopi81/project3/project3_env/lib/python3.8/site-packages/django/core/handlers/exception.py", line 34, in inner
response = get_response(request)
File "/home/juancopi81/project3/project3_env/lib/python3.8/site-packages/django/core/handlers/base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/home/juancopi81/project3/project3_env/lib/python3.8/site-packages/django/core/handlers/base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/juancopi81/project3/orders/views.py", line 79, in order
new_order.plates.add(i)
File "/home/juancopi81/project3/project3_env/lib/python3.8/site-packages/django/db/models/fields/related_descriptors.py", line 535, in __get__
return self.related_manager_cls(instance)
File "/home/juancopi81/project3/project3_env/lib/python3.8/site-packages/django/db/models/fields/related_descriptors.py", line 846, in __init__
raise ValueError('"%r" needs to have a value for field "%s" before '
File "/home/juancopi81/project3/project3_env/lib/python3.8/site-packages/django/db/models/base.py", line 518, in __repr__
return '<%s: %s>' % (self.__class__.__name__, self)
File "/home/juancopi81/project3/orders/models.py", line 71, in __str__
return f"{self.plates} Status: {self.status} Total Price: {self.price}"
File "/home/juancopi81/project3/project3_env/lib/python3.8/site-packages/django/db/models/fields/related_descriptors.py", line 535, in __get__
return self.related_manager_cls(instance)
File "/home/juancopi81/project3/project3_env/lib/python3.8/site-packages/django/db/models/fields/related_descriptors.py", line 846, in __init__
raise ValueError('"%r" needs to have a value for field "%s" before '
File "/home/juancopi81/project3/project3_env/lib/python3.8/site-packages/django/db/models/base.py", line 518, in __repr__
return '<%s: %s>' % (self.__class__.__name__, self)
File "/home/juancopi81/project3/orders/models.py", line 71, in __str__
return f"{self.plates} Status: {self.status} Total Price: {self.price}"
File "/home/juancopi81/project3/project3_env/lib/python3.8/site-packages/django/db/models/fields/related_descriptors.py", line 535, in __get__
return self.related_manager_cls(instance)
File "/home/juancopi81/project3/project3_env/lib/python3.8/site-packages/django/db/models/fields/related_descriptors.py", line 846, in __init__
raise ValueError('"%r" needs to have a value for field "%s" before '
File "/home/juancopi81/project3/project3_env/lib/python3.8/site-packages/django/db/models/base.py", line 518, in __repr__
return '<%s: %s>' % (self.__class__.__name__, self)
File "/home/juancopi81/project3/orders/models.py", line 71, in __str__
return f"{self.plates} Status: {self.status} Total Price: {self.price}"
File "/home/juancopi81/project3/project3_env/lib/python3.8/site-packages/django/db/models/fields/related_descriptors.py", line 535, in __get__
return self.related_manager_cls(instance)
File "/home/juancopi81/project3/project3_env/lib/python3.8/site-packages/django/db/models/fields/related_descriptors.py", line 846, in __init__
raise ValueError('"%r" needs to have a value for field "%s" before '
File "/home/juancopi81/project3/project3_env/lib/python3.8/site-packages/django/db/models/base.py", line 518, in __repr__
return '<%s: %s>' % (self.__class__.__name__, self)
File "/home/juancopi81/project3/orders/models.py", line 71, in __str__
return f"{self.plates} Status: {self.status} Total Price: {self.price}"
File "/home/juancopi81/project3/project3_env/lib/python3.8/site-packages/django/db/models/fields/related_descriptors.py", line 535, in __get__
return self.related_manager_cls(instance)
File "/home/juancopi81/project3/project3_env/lib/python3.8/site-packages/django/db/models/fields/related_descriptors.py", line 846, in __init__
raise ValueError('"%r" needs to have a value for field "%s" before '
File "/home/juancopi81/project3/project3_env/lib/python3.8/site-packages/django/db/models/base.py", line 518, in __repr__
return '<%s: %s>' % (self.__class__.__name__, self)
File "/home/juancopi81/project3/orders/models.py", line 71, in __str__
return f"{self.plates} Status: {self.status} Total Price: {self.price}"
File "/home/juancopi81/project3/project3_env/lib/python3.8/site-packages/django/db/models/fields/related_descriptors.py", line 535, in __get__
return self.related_manager_cls(instance)
File "/home/juancopi81/project3/project3_env/lib/python3.8/site-packages/django/db/models/fields/related_descriptors.py", line 846, in __init__
raise ValueError('"%r" needs to have a value for field "%s" before '
File "/home/juancopi81/project3/project3_env/lib/python3.8/site-packages/django/db/models/base.py", line 518, in __repr__
return '<%s: %s>' % (self.__class__.__name__, self)
File "/home/juancopi81/project3/orders/models.py", line 71, in __str__
return f"{self.plates} Status: {self.status} Total Price: {self.price}"
File "/home/juancopi81/project3/project3_env/lib/python3.8/site-packages/django/db/models/fields/related_descriptors.py", line 535, in __get__
return self.related_manager_cls(instance)
File "/home/juancopi81/project3/project3_env/lib/python3.8/site-packages/django/db/models/fields/related_descriptors.py", line 846, in __init__
raise ValueError('"%r" needs to have a value for field "%s" before '
解决方案
推荐阅读
- python-3.x - ModuleNotFoundError:没有名为“bs4”的模块,但我已经安装了它
- python - 如何在两个numpy数组上找到满足不同条件的行数
- swift - 在 Watchkit App Extension 中初次调用我的gestureclassifier.mlmodel 时出现以下运行时错误
- database - 在长文本字段上使用 PostgreSQL trigrams 进行慢速模糊搜索
- java - 为什么我的代码不能使用 Java JNA 将“@”和“~”等字符发送到另一个窗口?
- cmake - 如何使用 CMake 构建 libpng
- javascript - 如何使用 gatsby-image 从数组中查询多个图像?
- python - Visual Studio Code 中的 Python 应该这么慢吗?
- php - ACF get_field() 未在 WordPress 中返回值
- javascript - 转向转向导航