2012-07-27 19 views
5

Olası Çoğalt:Tastypie bir sorguya filtreleri birleştiren

class TaggedResource(ModelResource): 
    tags = ListField() 
    user = fields.ForeignKey(UserProfileResource, 'user') 

    class Meta: 
     queryset = Media.objects.all().order_by('-timestamp') 
     authorization = MediaAuthorization() 
     detail_allowed_methods = ['get', 'post', 'put', 'delete','patch'] 

    filtering = { 
     #'user': ALL_WITH_RELATIONS, 
     #exact is date, lt is less than lte less than equal to, etc 
     'timestamp': ['exact', 'range', 'lt', 'lte', 'gte', 'gt'], 
     'social_source': ALL, 
     'media_type': ALL, 
     'comment': ['exact', 'startswith', 'endswith', 'contains'], 
     'media_text': ['exact', 'startswith', 'endswith', 'contains'], 
    } 

Bir olması gerekir:


Django Tastypie Advanced Filtering: How to do complex lookups with Q objects

Şöyle bir tastypie modelRseource var VEYA operatörler filtreler arasında ve sorguyu bir parametrede birleştirmeyi çok ister. Örneğin, "test" kelimesini içeren nesneleri açıklama alanına OR media_text alanından döndürmek istiyorum.

Bu ideal olacaktır: http: mysite.com/api/v1/tagged q = test 'q' iki alana yönelik bir OR filtresi gerçekleştirir

.

Bu yapılabilirlik?

GÜNCELLEME: İşte gelişmiş filtreler ile çalışan ancak bir OR deyimi nasıl gerçekten emin değilim am şudur:

def build_filters(self, filters=None): 
    if filters is None: 
     filters = {} 

    orm_filters = super(TaggedResource, self).build_filters(filters) 

    if 'q' in filters: 
     orm_filters['comment__contains'] = filters['q'] 
     orm_filters['media_text__contains'] = filters['q'] 
    return orm_filters 

cevap

1

Ben' Bu mümkün emin değil rağmen Advanced Filtering bakarak önermek istiyorum . Ancak, build_filters öğesini geçersiz kılarsanız, tüm Resource (Kaynak) erişiminiz olur ve bu, olası alanlardan daha fazlasını karşılaştıran filtreleri tanımlayabilir. Sen build_filters geçersiz kılarak doğru olanı yapıyoruz

+0

Evet, Gelişmiş Filtreleme'ye bakıyordum ve bir VEYA ifadesi nasıl yapacağımı bilmiyorum. Sahip olduğum şey bir AND koşulu ile filtrelemek. – bevinlorenzo

+0

Gelişmiş filtremi özgün soruya ekledim. – bevinlorenzo

+0

Demek istediğim, aslında kendi filtrenizi tanımlamak zorunda kalıyorsunuz ve sonra tastip filtrelemeye ekleyebileceğiniz yer burası. –