2012-07-27 10 views
5

संभव डुप्लिकेट:Tastypie में एक क्वेरी में फिल्टर का मेल

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'], 
    } 

मैं एक की आवश्यकता है:
Django Tastypie Advanced Filtering: How to do complex lookups with Q objects

मैं एक tastypie modelRseource है कि इस तरह दिखता है या फिल्टर के बीच ऑपरेटर और क्वेरी को एक पैरामीटर में गठबंधन करना पसंद करेंगे। उदाहरण के लिए, मैं उन वस्तुओं को वापस करना चाहता हूं जिनमें टिप्पणी फ़ील्ड या media_text फ़ील्ड से "परीक्षण" फ़िल्टरिंग शब्द शामिल है।

यह आदर्श होगा: http: mysite.com/api/v1/tagged q = परीक्षण

जहां 'क्यू' एक या दोनों क्षेत्रों के लिए फिल्टर करता है।

क्या यह करने योग्य है?

अद्यतन: यहाँ है कि मैं क्या उन्नत फ़िल्टर के साथ पर काम कर रहा हूँ, लेकिन वास्तव में यकीन है कि कैसे एक OR कथन पाने के लिए नहीं कर रहा हूँ है:

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 

उत्तर

4

आप build_filters अधिभावी सही काम कर रहे हैं, आप और/या प्रश्नों के लिए Django के क्यू वर्ग का उपयोग कर सकते हैं, मैं एक ऐसी ही सवाल यहाँ

Tastypie filtering with multiple values

के जवाब दिए और यहाँ है एक और दिलचस्प एक है:

Tastypie Negation Filter

+0

यही मुझे चाहिए। धन्यवाद! – bevinlorenzo

1

मैं Advanced Filtering पर रखने का सुझाव देते हैं, भले ही मैं 'नहीं यकीन है कि यह संभव है । लेकिन यदि आप build_filters को ओवरराइड करते हैं, तो आपके पास पूरे संसाधन तक पहुंच है और संभवतः ऐसे फ़िल्टर को परिभाषित कर सकते हैं जो फ़ील्ड से अधिक हो।

+0

हाँ, मैं उन्नत फ़िल्टरिंग में देख रहा था और वास्तव में कोई संकेत नहीं है कि मैं एक या कथन कैसे करूंगा। मेरे पास एक और शर्त के साथ फ़िल्टरिंग है। – bevinlorenzo

+0

मैंने अपने उन्नत फ़िल्टर को मूल प्रश्न में जोड़ा। – bevinlorenzo

+0

मेरा मतलब था कि वास्तव में आपको अपने स्वयं के फ़िल्टर को परिभाषित करना होगा, और फिर यह वह स्थान है जहां आप इसे स्वादिष्ट फ़िल्टरिंग में जोड़ सकते हैं। –

संबंधित मुद्दे