• Members 9 сообщений
    2 июля 2021 г. 21:43

    всем доброго времени суток!
    когда я запускаю магазин на локальном сервере и пытаюсь разместить заказ, то сталкиваюсь с такой проблемой:

    TypeError at /make-order/
    'AnonymousUser' object is not iterable
    Request Method: POST
    Request URL: http://192.168.188.26:8000/make-order/
    Django Version: 3.2.4
    Exception Type: TypeError
    Exception Value:
    'AnonymousUser' object is not iterable
    Exception Location: C:\Users\dinar\PycharmProjects\shop_scnd_copy\venv\lib\site-packages\django\utils\functional.py, line 247, in inner
    Python Executable: C:\Users\dinar\PycharmProjects\shop_scnd_copy\venv\Scripts\python.exe
    Python Version: 3.9.2
    Python Path:
    ['C:\Users\dinar\PycharmProjects\shop_scnd_copy\venv\django3-ecommerce',
    'C:\Users\dinar\AppData\Local\Programs\Python\Python39\python39.zip',
    'C:\Users\dinar\AppData\Local\Programs\Python\Python39\DLLs',
    'C:\Users\dinar\AppData\Local\Programs\Python\Python39\lib',
    'C:\Users\dinar\AppData\Local\Programs\Python\Python39',
    'C:\Users\dinar\PycharmProjects\shop_scnd_copy\venv',
    'C:\Users\dinar\PycharmProjects\shop_scnd_copy\venv\lib\site-packages']

    не подскажете, каким образом ее можно решить?

  • Team
    2 июля 2021 г. 22:21

    Подскажу. Нужно понять суть данной ошибки. Найти место по стэк трейсу где этот код валится.

  • Members 9 сообщений
    2 июля 2021 г. 22:25

    в классе Cart class Cart(models.Model):

    owner = models.ForeignKey('Customer', verbose_name='Kunde', on_delete=models.CASCADE)
    products = models.ManyToManyField(CartProduct, blank=True, related_name='related_cart')
    total_products = models.PositiveIntegerField(default=0)
    final_price = models.DecimalField(max_digits=9, default=0, decimal_places=2, verbose_name='Gesamtpreis')
    in_order = models.BooleanField(default=False)
    for_anonymous_user = models.BooleanField(default=False)
    
    def __str__(self):
        return str(self.id)
    

    для owner я писал null=True, чтобы не выходило подобной ошибки:

    RelatedObjectDoesNotExist at /add-to-cart/cabrio_1302/notebooks/
    Cart has no owner.
    Request Method: GET
    Request URL: http://192.168.188.26:8000/add-to-cart/cabrio_1302/notebooks/
    Django Version: 3.2.4
    Exception Type: RelatedObjectDoesNotExist
    Exception Value:
    Cart has no owner.
    Exception Location: C:\Users\dinar\PycharmProjects\shop_scnd_copy\venv\lib\site-packages\django\db\models\fields\related_descriptors.py, line 197, in get
    Python Executable: C:\Users\dinar\PycharmProjects\shop_scnd_copy\venv\Scripts\python.exe
    Python Version: 3.9.2
    Python Path:
    ['C:\Users\dinar\PycharmProjects\shop_scnd_copy\venv\django3-ecommerce',
    'C:\Users\dinar\AppData\Local\Programs\Python\Python39\python39.zip',
    'C:\Users\dinar\AppData\Local\Programs\Python\Python39\DLLs',
    'C:\Users\dinar\AppData\Local\Programs\Python\Python39\lib',
    'C:\Users\dinar\AppData\Local\Programs\Python\Python39',
    'C:\Users\dinar\PycharmProjects\shop_scnd_copy\venv',
    'C:\Users\dinar\PycharmProjects\shop_scnd_copy\venv\lib\site-packages']
    если убрать null=True, то для всех юзеров создается одна корзина...

  • Members 9 сообщений
    2 июля 2021 г. 22:27

    как я понял, вот здесь падает код

    class CartMixin(View):

    def dispatch(self, request, *args, **kwargs):
        if request.user.is_authenticated:
            customer = Customer.objects.filter(user=request.user).first()
            if not customer:
                customer = Customer.objects.create(
                    user=request.user
                )
            cart = Cart.objects.filter(owner=customer, in_order=False).first()
            if not cart:
                cart = Cart.objects.create(owner=customer)
        else:
            cart = Cart.objects.filter(for_anonymous_user=True).first()
            if not cart:
                cart = Cart.objects.create(for_anonymous_user=True)
        self.cart = cart
        return super().dispatch(request, *args, **kwargs)