Có sự khác biệt nào giữa bộ lọc và loại trừ trong django không? Nếu tôi cóBộ lọc Django và loại trừ
self.get_query_set().filter(modelField=x)
và tôi muốn thêm tiêu chí khác, có sự khác biệt có ý nghĩa giữa hai dòng mã sau không?
self.get_query_set().filter(user__isnull=False, modelField=x)
self.get_query_set().filter(modelField=x).exclude(user__isnull=True)
được coi là thực hành tốt hơn hoặc chúng giống nhau về cả chức năng và hiệu suất?
cảm ơn. vì vậy nó chỉ là vấn đề sở thích cá nhân? tôi chỉ muốn chắc chắn rằng tôi sẽ không làm điều gì đó không thể giải thích được. – Enrico
@Enrico: Không thực sự, nó phụ thuộc vào những gì bạn muốn. Xem câu trả lời của tôi. Hiệu suất không quan trọng trong trường hợp này, chúng là hai phương pháp phục vụ các mục đích khác nhau. Đối với thế hệ SQL, tài liệu nói về '.exclude()': * Nhiều tham số được nối qua AND trong câu lệnh SQL nằm bên dưới, và toàn bộ điều được đính kèm trong một NOT(). * –
@Felix. Cảm ơn. Tôi đoán câu hỏi chính của tôi - mà tôi có thể đã truyền đạt rõ ràng hơn là về hiệu suất của cả hai trong django và sau đó cuối cùng SQL. Từ nhận xét tiếp theo của bạn, có vẻ như người ta có thể hoạt động tốt hơn người khác nhưng chủ yếu dựa trên kết quả SQL. Tuy nhiên, thay đổi câu lệnh thứ hai thành '.exclude (user__isnull = True) .filter (modelField = x)' sau đó sẽ làm cho hai câu lệnh nhiều hơn hoặc bằng nhau một lần nữa. – Enrico