首页 > 解决方案 > /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 '

标签: pythondjango

解决方案


推荐阅读