2013-02-23 38 views
5

Tôi đang cố gắng so sánh tìm kiếm truy vấn của mình với tất cả các trường mô hình của mình, nhưng tôi không thể tìm cách thực hiện nó trong nhiều trường.Cách lấy nhiều trường với bộ lọc django icontains

đây là mã của tôi.

expense = Expense.objects.filter(user=request.user.id).order_by('date') 

q = request.GET['q'] 
result = expense.filter(name__icontains=q) 

Tôi muốn kiểm tra trong: name, amount, category

Cảm ơn trước

+0

Nếu số lượng là số nguyên, có thể bạn sẽ không muốn sử dụng icontains, nhưng thường xuyên tra cứu. – Udi

Trả lời

11

Từ Django tài liệu:

"Từ khoá luận thắc mắc - trong bộ lọc(), vv - Nếu bạn cần thực hiện các truy vấn phức tạp hơn (ví dụ, các truy vấn với câu lệnh OR), bạn có thể sử dụng các đối tượng Q. "

from django.db.models import Q 
expense.objects.filter(
    Q(name__icontains=q) | Q(amount__icontains=q) | Q(category__icontains=q) 
) 

Tôi không chắc chắn về loại số lượng và danh mục trong mô hình của bạn để icontains có thể không hoạt động trên chúng.

xem this link.

+1

Bạn nên sử dụng bộ lọc thay vì nhận được, vì chỉ trả về một đối tượng. – UnLiMiTeD

+0

@UnLiMiTeD cảm ơn sự điều chỉnh. – jurgenreza

+0

Hoàn hảo, cảm ơn bạn rất nhiều – yaniv14

0

Công trình này hoàn hảo như Jurgenreza đã trả lời.

from django.db.models import Q 
expense.objects.filter(
    Q(name__icontains=q) | Q(amount__icontains=q) | Q(category__icontains=q) 
) 
Các vấn đề liên quan