नमस्ते मेरे पास एक एप्लिकेशन है जो एक काउंटर को अपडेट करके खोजे गए शब्दों की जांच और गणना करता है यदि क्वेरी पहले ही खोजी जा चुकी है और यदि क्वेरी नई है तो काउंटर = 1 के साथ एक फ़ील्ड सम्मिलित करता है।

खोज काउंटर मॉडल:

class Search(models.Model):
    term = models.CharField(unique=True, max_length=255)
    counter = models.IntegerField()
    last_search = models.DateTimeField()

और एक दृश्य जिसमें यह शामिल है:

# update search counter with term
    try:        
        term = Search.objects.get(term=query)
    except Search.DoesNotExist:
        term = None
    if term:
        term.counter = F('counter') + 1
        term.last_search = datetime.now()
    else:
        term = Search(
                term=query,
                counter=1,
                last_search = datetime.now()
        )               
    term.save()

मेरा प्रश्न वास्तव में है - क्या ऐसा करने का यह एक अच्छा तरीका है और क्या इसे रखने का एक और संक्षिप्त तरीका है? यह मेरे लिए अत्यधिक बदसूरत लगता है, और एक Django नौसिखिया होने के नाते मैं इसका 'सर्वोत्तम अभ्यास' कार्यान्वयन देखना चाहता हूं। किसी भी उत्तर की सराहना की।

0
Darwin Tech 25 अगस्त 2011, 02:48

1 उत्तर

सबसे बढ़िया उत्तर

यहां एक अधिक संक्षिप्त संस्करण है (आपको काउंटर फ़ील्ड पर "डिफ़ॉल्ट = 0" सेट करने की आवश्यकता हो सकती है):

try:
    term = Search.objects.get(term=query)
except Search.DoesNotExist:
    term = Search(term=query)

term.counter += 1
term.last_search = datetime.now()
term.save()

आपको कंस्ट्रक्टर में सभी मान सेट करने की आवश्यकता नहीं है - जब तक कि वे सभी वहां मौजूद हैं जब तक आप सहेजते हैं या मान्य करते हैं।

0
SJK 25 अगस्त 2011, 03:39
उत्तम। मुझे पता था कि ऐसा करने का एक और शानदार तरीका होगा। धन्यवाद।
 – 
Darwin Tech
25 अगस्त 2011, 19:22