django- रेटिंग के आधार पर मतदान छँटाई

मुझे लगता है कि कई इस विस्तार से परिचित हैं, लेकिन फिर भी:
django-voting आपको अधिकतम 30 मिनट के लिए digg सिद्धांत (+ 1 / -1) के अनुसार किसी भी इकाई का मूल्यांकन दर्ज करने की अनुमति देता है (एसिंक्रोनस JS अनुरोधों को शामिल करने सहित)।
परियोजना स्थल: django-voting.googlecode.com
लेकिन एक बुरी विशेषता है: मानक ORM उपकरणों का उपयोग करके रेटिंग के आधार पर संस्थाओं को सॉर्ट करने में असमर्थता। अगला, मैं वर्णन करूंगा कि मैंने इसे कैसे लागू किया।
वास्तव में, रेटिंग क्वेरी द्वारा पुनर्प्राप्त की जाती है:
 SUM (वोट) का चयन करें वोटों से कहां से content_type_id =?  और object_id =? 
जहां प्रकार आईडी (सामग्री प्रकार) और ऑब्जेक्ट आईडी इंगित करने के लिए।
बेशक, आप सिर पर जा सकते हैं और कुछ ऐसा कर सकते हैं:
  अनुच्छेद। 
लेकिन यह, IMHO, थोड़ा लंबा है, खासकर यदि आपको कई बार ऐसा करने की आवश्यकता होती है।
"कई बार" प्रबंधकों का उपयोग करने की आवश्यकता का प्रतीक है ... कहते हैं, Article.objects प्रबंधक है। यह जानते हुए भी, आप अपना खुद का लिख ​​सकते हैं। एकमात्र प्रश्न यह है कि टाइप आईडी का निर्धारण कैसे किया जाए? यह contenttype ढांचे का कार्य है। मुझे लगता है कि प्रबंधक कोड लाना आसान है:
  वर्ग स्कोरऑर्डर मैनजर (मॉडल.मनगर):
     def select_score (सेल्फ):
         "" "वस्तु के लिए मतदान परिणाम चुनें" "
         django.contrib.contenttypes.models से ContentType आयात करें
         model_type = ContentType.objects.get_for_model (self.model)
         table_name = self.model._meta.db_table
         स्वंय स्वदेश लौटें (चयन करें = {'स्कोर': 'SUM (वोट) का चयन करें) वोटों से जहां सामग्री_type_id =% i और object_id =% s.id'% (int (model_type.id), table_name)}) 
अगला, हम प्रबंधक को ऑब्जेक्ट से जोड़ते हैं, बस एक संपत्ति जोड़ते हैं (आप वस्तुओं को ओवरराइड कर सकते हैं) मूल्य = प्रबंधक उदाहरण के साथ।
  कक्षा लेख:
     शीर्षक = मॉडल। चरफिल्ड (अधिकतम_ गति = २००)
     ...
     mymanager = स्कोरर प्रबंधक () 
इसके अलावा, सब कुछ सिद्धांत के अनुसार काम करता है:
  Article.mymanager.select_score ()। Order_by ('- स्कोर') 
एकमात्र समस्या है select_score को सीधे प्रबंधक से कॉल करने की आवश्यकता है। QuerySet के पास यह गुण नहीं है। (इस विषय पर सुझाव सुनने के लिए तैयार)

मूल: " django- वोटिंग रेटिंग छँटाई "

PS> सामान्य तौर पर, Google कोड पर पर्याप्त django- * प्रोजेक्ट होते हैं। मैं उन्हें दृढ़ता से सलाह देता हूं कि वे देखें, बहुत सारी ऊर्जा बचाएं। यह इस तथ्य के लिए है कि मैंने उन्हें अपेक्षाकृत हाल ही में खोजा था।


Source: https://habr.com/ru/post/In19927/


All Articles