본문으로 바로가기

장고 CRUD 기능 구현(4) Delete

category 장고/MTV 2019. 5. 7. 21:24

Delete(삭제)

  • CRUD 에서 가장 단순한 기능 구현 작업이다.

Product Model

class Product(models.Model):
    description = models.CharField(max_length=100)
    price = models.DecimalField(max_digits=9, decimal_places=2)
    quantity = models.IntegerField()

    def __str__(self):
        return self.description

views.py 에서 핸들링

  • 해당하는 객체에 접근하여 delete() 메서드로 DB 에서 해당 객체를 삭제한다.
  • 지금 삭제 기능은 지극히 기능 구현에만 목적을 두었기 때문에 모든 사람이 다 삭제가 가능하다.
    • request 에는 user 정보가 있기 때문에 request.user.id 로 인증하는 것도 하나의 방법
def product_delete(request, pk):
    product = Product.objects.get(pk=pk)

    if request.method == 'POST':
        product.delete()
        return redirect('product:products')
    context = {
        'product': product,
    }
    return render(request, 'product/product-delete-confirm.html', context)

템플릿

# product-detail.html 에서 디테일 페이지로 접근
<a href="{% url 'product:delete' product.pk %}">삭제하기</a>


# product-delete-confirm.html
{% extends 'base.html' %}

{% block content %}

<form action="" method="POST">
    {% csrf_token %}
    <h2>이 댓글을 삭제 하시겠습니까?</h2>
    <button type="submit">삭제하기</button>
</form>

{% endblock %}

결론

지금은 단순히 하나의 모델 객체에만 접근했기 때문에 쉽게 구현되지만 ForeignKey 와 같은 관계형 모델이 관여하게 되면 생각보다 복잡한 작업이 된다. 지금 내가 접근하고자 하는 객체에 포커스를 두어 전체 흐름이 어떻게 돌아가는지도 잊지 말고 생각하자.

'장고 > MTV' 카테고리의 다른 글

list view 구현(multiple queryset list view)  (0) 2019.05.16
장고 한줄 정리  (0) 2019.05.15
장고 CRUD 기능 구현(3) Update  (0) 2019.05.07
장고 CRUD 기능 구현(2) Read  (0) 2019.05.07
장고 CRUD 기능 구현(1) Create  (0) 2019.05.07