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

    Доброго времени суток. Запускаю код на локальном сервере, захожу на сайт. При добавлении товара в корзину возникает такая ошибка:

    RelatedObjectDoesNotExist at /add-to-cart/vw_golf/bags/
    Cart has no owner.
    Request Method: GET
    Request URL: http://192.168.1.165:8000/add-to-cart/vw_golf/bags/
    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']

    Вот код Cart и Customer:

    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)
    

    class Customer(models.Model):

    user = models.ForeignKey(User, verbose_name='Kunde', on_delete=models.CASCADE)
    phone = models.CharField(max_length=20, verbose_name='Handynummer', null=True, blank=True)
    email = models.EmailField(max_length=255, verbose_name='Email', default='')
    address = models.CharField(max_length=255, verbose_name='Adresse', null=True, blank=True)
    orders = models.ManyToManyField('Order', verbose_name='Bestellungen', related_name='related_order')
    
    def __str__(self):
        return "Kunde: {} {}".format(self.user.first_name, self.user.last_name)
    

    Вот вьюшка:

    class AddToCartView(CartMixin, View):

    def get(self, request, *args, **kwargs):
        ct_model, product_slug = kwargs.get('ct_model'), kwargs.get('slug')
        content_type = ContentType.objects.get(model=ct_model)
        product = content_type.model_class().objects.get(slug=product_slug)
        cart_product, created = CartProduct.objects.get_or_create(
            user=self.cart.owner, cart=self.cart, content_type=content_type, object_id=product.id
        )
        if created:
            self.cart.products.add(cart_product)
        recalc_cart(self.cart)
    
        return HttpResponseRedirect('/cart/')
    

    вот CartMixin:
    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)
    

    Не подскажете, что не так?

  • Team
    4 июля 2021 г. 22:10

    Джанго уже сказал, что не так. Исправляйте.

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

    надо авторизовать пользователя?

  • Team
    4 июля 2021 г. 22:14

    Вы мне скажите :)

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

    я правильно понимаю, что нужно использовать Django-Sessions?

  • Team
    4 июля 2021 г. 22:22

    У корзины нет владельца. Надо чтобы он появился.

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

    Да, я это понимаю. Только почему при запуске на компьютере через runserver владелец есть, а при запуске в локальной сети его нет?

  • Team
    5 июля 2021 г. 19:18

    Как успехи?

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

    пока никак. пишу код

  • Members 9 сообщений
    6 июля 2021 г. 5:05

    не могу я прикрутить сюда Django sessions. Знаний не хватает. Не подскажете, как это реализовать? Если угодно, то за вознаграждение

  • Team
    6 июля 2021 г. 9:24

    При чем здесь django sessions? Изначально ошибка, что у корзины нет пользователя.