2010-09-27 57 views
123

Tôi muốn xóa một bản ghi cụ thể. Chẳng hạn nhưLàm thế nào để xóa một bản ghi trong mô hình Django?

delete from table_name where id = 1; 

Làm cách nào để thực hiện điều này trong django model?

+10

Cảm ơn đã hỏi câu hỏi này. Đôi khi RTFM mất nhiều thời gian hơn tìm kiếm của Google và SO, được chứng minh bằng số lượng câu trả lời và số lượt xem –

+3

Đồng ý với @Freedom_Ben, nhưng đối với những người đọc tương lai giống như hướng dẫn sử dụng f *, đây là những gì bạn ' đang tìm kiếm: https://docs.djangoproject.com/en/dev/topics/db/queries/#topics-db-queries-delete – Dinei

Trả lời

290

Có một vài cách khác nhau:

Để xóa nó trực tiếp:

SomeModel.objects.filter(id=id).delete() 

Để xóa nó từ một ví dụ:

instance = SomeModel.objects.get(id=id) 
instance.delete() 
+22

Lưu ý rằng người đầu tiên sẽ không gọi phương thức .delete() của đối tượng , vì vậy nếu bạn có mã 'dọn dẹp' trong phương thức đó, nó sẽ không được gọi. Nói chung không phải là một vấn đề, nhưng đáng lưu ý. –

+6

@Matthew Schinckel: đó là sự thật. Nếu bạn muốn có một phương pháp xóa tùy chỉnh hơn bạn nên sử dụng tín hiệu 'pre_delete' hoặc' post_delete' thay thế. – Wolph

+1

Tôi không biết trường hợp là gì sau khi DJango 1.4, nhưng điều này thực sự là lấy tất cả các PK và sau đó xóa bởi những PK đó. Vì vậy, ví dụ nếu bạn xóa bởi một trường tùy ý, điều này có thể chậm hơn sau đó đối tác SQL ... :( –

Các vấn đề liên quan