Удаление значения внешнего ключа - PullRequest
1 голос
/ 26 апреля 2020

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

  coupon = models.ForeignKey(
        'Coupon', on_delete=models.SET_NULL, blank=True, null=True)

Когда я пытаюсь удалить купон с помощью этой функции:

def remove_coupon(request):
    coupon = Order.objects.get(
        user=request.user, ordered=False)
    coupon.coupon.delete()
    return redirect("core:checkout")

Удаляет купон из Order модель, но также удаляет купон в модели Coupon. Я хотел сделать так, чтобы он только удалял значение из Order, а не из Coupon модели.

Я также пробовал on_delete=models.CASCADE, но мой сайт тогда зависал. Где проблема?

1 Ответ

1 голос
/ 26 апреля 2020

Вам просто нужно установить внешний ключ на None

def remove_coupon(request):
    order = Order.objects.get(user=request.user, ordered=False)
    order.coupon = None
    order.save()
    return redirect("core:checkout")

Вы также можете сделать это один запрос

Order.objects.filter(user=request.user, ordered=False).update(coupon=None)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...