Сбой ограничения FOREIGN KEY при удалении объектов - PullRequest
0 голосов
/ 12 октября 2019

Когда я собираюсь удалить продукт из моей корзины, появляется сообщение об ошибке FOREIGN KEY constraint failed

class Cart(TimeStamp):
    user = models.ForeignKey('authentication.User', on_delete=models.CASCADE, related_name='user_carts', null=True)
    product = models.ForeignKey(Product, on_delete=models.CASCADE, null=True, blank=True)
    sub_total_price = models.DecimalField(max_digits=100, decimal_places=2, blank=True, null=True)
    quantity = models.PositiveIntegerField(default=1)

вот модель в первую очередь, я думал, что проблема будет on_delete, и я изменил ее на SET_NULLно это было бесполезно, и это не сработало, я попытался удалить все файлы из папки migrations, это также не решило мою проблему. здесь views.py

class CartUpdateDestroyView(generics.RetrieveUpdateDestroyAPIView):
    queryset = Cart.objects.all()
    serializer_class = CartSerializer
    permission_classes = (IsOwnerOrAdmin,)
    lookup_field = 'id'

    def get_queryset(self):
        return Cart.objects.filter(user=self.request.user)

в этом представлении, кроме Destroy, все работают правильно, но я не могу удалить объект. Любая идея, пожалуйста?

1 Ответ

0 голосов
/ 12 октября 2019

views.py

def cart_update(request):
    product_id = request.POST.get('product_id')

    if product_id is not None:
        try:
            product_obj = Product.objects.get(id=product_id)
        except Product.DoesNotExist:
            print("Show message to user, product is gone?")
            return redirect("cart:home")
        cart_obj, new_obj = Cart.objects.new_or_get(request)
        if product_obj in cart_obj.products.all():
            cart_obj.products.remove(product_obj)
            added = False
        else:
            cart_obj.products.add(product_obj) # cart_obj.products.add(product_id)
            added = True
        request.session['cart_items'] = cart_obj.products.count()
        # return redirect(product_obj.get_absolute_url())
        if request.is_ajax(): # Asynchronous JavaScript And XML / JSON
            print("Ajax request")
            json_data = {
                "added": added,
                "removed": not added,
                "cartItemCount": cart_obj.products.count()
            }
            return JsonResponse(json_data)
    return redirect("cart:home")

models.py

class Cart(models.Model):
user        = models.ForeignKey(User, null=True, blank=True)
products    = models.ManyToManyField(Product, blank=True)
subtotal    = models.DecimalField(default=0.00, max_digits=100, decimal_places=2)
total       = models.DecimalField(default=0.00, max_digits=100, decimal_places=2)
updated     = models.DateTimeField(auto_now=True)
timestamp   = models.DateTimeField(auto_now_add=True)
total1      = models.DecimalField(default=0.00, max_digits=100, decimal_places=2)

objects = CartManager()

def __str__(self):
    return str(self.id)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...