मान लें कि मेरे पास एक Django मॉडल ऑब्जेक्ट है जिसे last_updated डेटाटाइम फ़ील्ड आज की तारीख के बराबर होने पर किसी विशेष फ़ील्ड को अपडेट करने की आवश्यकता है।

यदि मैं दौड़ की स्थिति से बचने के लिए F अभिव्यक्ति का उपयोग करता, तो last_updated की तारीख की तुलना timezone.now().date() का उपयोग करके वर्तमान तिथि से करने का सबसे अच्छा तरीका क्या होगा?

3
Clueless_Coder 27 मार्च 2018, 11:28

3 जवाब

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

अगर मैं गलत नहीं हूं, तो F() वह ऑपरेशन नहीं कर सकता। इसलिए मैं < का उपयोग करके इसे प्राप्त करने का एक और तरीका सुझाऊंगा। मजबूत>निकालें()

from django.db.models.functions import ExtractDay, ExtractMonth, ExtractYear

queryset = SampleModel.objects.annotate(day=ExtractDay('last_updated'),
                                        month=ExtractMonth('last_updated'),
                                        year=ExtractYear('last_updated')
                                        ).filter(day=timezone.now().day,
                                                 month=timezone.now().month,
                                                 year=timezone.now().year
                                                 )


यह एक QuerySet() लौटाएगा, इसलिए आप नीचे दी गई .get() विधि द्वारा एक विशिष्ट उदाहरण प्राप्त कर सकते हैं,

specific_model_instance = queryset.get(id=specific_id)


नोट: मुझे पता है कि यह थोड़ी लंबी प्रक्रिया है। लेकिन यह काम करेगा

2
JPG 28 मार्च 2018, 06:03

यदि आप दिनांक के आधार पर फ़िल्टर करना चाहते हैं, और आपके मॉडल में DateTime फ़ील्ड है, तो आप केवल Django के __date लुकअप का उपयोग कर सकते हैं:

MyModel.objects.filter(last_updated__date=timezone.now().date()).update(...)

साथ ही, एक सामान्य नोट के रूप में, याद रखें कि आपके कोड का टाइमज़ोन व्यवहार टाइमस्टैम्प और तिथियों के बीच तुलना को प्रभावित करेगा (यानी एक ही टाइमस्टैम्प अलग-अलग तिथियों के अनुरूप हो सकता है, जिसके आधार पर टाइमज़ोन उपयोग में है)।

1
SMX 10 मई 2018, 20:24

मुझे लगता है कि आप सशर्त अपडेट का इस्तेमाल करके कुछ करना चाहते हैं इसके बजाय

तो कुछ की तर्ज पर:

Client.objects.update(
  other_field=Case(
    When(last_updated__eq=datetime.date.today(),
         then=Value('OTHER_FIELD_VALUE'))
  )
)
1
Alper 27 मार्च 2018, 14:11