2014-04-03 23 views
5

Tôi có một mẫu:'Q' đối tượng không có thuộc tính 'chia' - Django

class Authors(models.Model): 
    name = models.TextField() 
    person = models.ForeignKey(Person) 

và truy vấn:

authors = Author.objects.filter(
           (Q(name__iregex=r"\y{0}\y".format(s1)), 
           ~Q(name__iregex=r"\y{0}\y".format(s2)) 
           ), 
           person=None).order_by('-id') 

Tôi nhận được lỗi:

'Q' object has no attribute 'split' 

tại sao thế này tôi không sử dụng split() mặc dù .. dòng lỗi nằm trong dòng truy vấn này.

+0

Kết quả khớp '\ y' là gì? Tôi chưa bao giờ thấy nó trước đây. – frnhr

+0

@frnhr chỉ khớp toàn bộ các từ và không phải là một phần của các từ .. http://stackoverflow.com/a/14998059/903790 – doniyor

Trả lời

6

Tôi nghĩ bạn cần tham gia các bộ lọc Q() của mình với toán tử logic như | hoặc &.

authors = Author.objects.filter(
           (Q(name__iregex=r"\y{0}\y".format(s1)) & 
           ~Q(name__iregex=r"\y{0}\y".format(s2)) 
           ), 
           person=None).order_by('-id') 
+0

tôi nghĩ, '', '' ở lại cho '' & '', bỏ nó? – doniyor

+0

Tôi nghĩ vì bạn có các đối tượng 'Q()' được bọc trong một paren, bạn cần sử dụng '&' một cách rõ ràng. I.e, bạn có 'filter ((Q(), Q()), person = None)'. Thay đổi thành '&' công việc? Tôi không hoàn toàn tự tin về câu trả lời này TBH haha ​​ –

+0

cảm ơn người đàn ông, làm việc như bất cứ điều gì bây giờ :) – doniyor

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