2016-04-08 15 views
0

Bir modele filtre uygulamak ve aramaya cevap vermek için bir django sorgusu kullanıyorum. İşte Django Filter with AND

görünümleri

if user_search != '' and (start_date != '' and end_date != ''): 
    items = Order.objects.filter(
     Q(client__email__iexact=user_search) , Q(created_on__range=(start_date, end_date)) 
     ) 
    print "items ", items 

Django filtresi tarih aralığına düşen kullanıcının aradığı e-posta adresini, yazdırmak olmasıdır. Ama kodu da araması yapılmamıştır e basar ama tarih aralığına İşte

içine düşen yaşıyorum modeli

class Order(models.Model): 
    client    =  models.ForeignKey(User, related_name = "order_user") 
    order_number   =  models.CharField(max_length = 12)null=True) 
    terms_and_conditions =  models.BooleanField(default=False) 
    order_status   =  models.CharField(max_length = 20, choices = ORDER_STATUS, default = "new") 
    created_on   =  models.DateTimeField(auto_now_add = True) 
    edited_on   =  models.DateTimeField(auto_now_add = False) 



    def __unicode__(self): 
     return self.order_number 
+0

Bunu Django 1.8'de yeniden oluşturamıyorum. İki 'Q' args sahip' '' '' '' '' '' '' '' '' ('' client '' (client__email__iexact = user_search) & Q (created_on__range = (start_date, end_date) ''i kullanmaya eşdeğer olmalıdır. Kodunuz 'Order.objects.filter (client__email__iexact = user_search, created_on__range = (start_date, end_date)) için basitleştirilebilir.'. – Alasdair

+0

@Alasdair Kullanılmış & Operatör ama yine de – uche

+0

için aramadığım e-posta adresini yazdırıyor. Varolan kod **, tarih aralığın dışındaysa e-posta adreslerini döndürmemelidir. Sorunu yeniden oluşturabilen bazı kodları ve aldığınız sonuçları gösterirseniz yardımcı olabilir. Belki de (örneğin, kodu değiştirdikten sonra sunucuyu yeniden başlatmadınız) kod – Alasdair

cevap

1

Q nesneler üzerinde yapıyor VE işlemleri için kullanın & olduğunu.

if user_search != '' and (start_date != '' and end_date != ''): 
    items = Order.objects.filter(
     Q(client__email__iexact=user_search) & Q(created_on__range=(start_date, end_date)) 
     ) 
    print "items ", items 
+0

Kullanılmış & Operatör ama hala yazdırıyor e-posta adresim için arama yapmadım – uche

+0

nota 'duyarsız bir eşleşmesi gereken iexact' kullandık POs 'Sipariş' modelinin kodu. –

+0

@uche, Kullanıcı modeli kodunu gönderir. –