2012-09-12 20 views
46

एक क्वेरी प्राप्त करने का प्रयास कर रहा है जहां गतिविधि रिकॉर्ड मेरे सोलर इंडेक्स में पुराना है। मैं यह देखने के लिए जांचना चाहता हूं कि Activity.updated डेटाबेस में दिनांक Activity.added_toSolr_date से अधिक रिकॉर्ड के लिए है। नमूने के लिए https://docs.djangoproject.com/en/1.4/ref/models/querysets/ और इकाई परीक्षण: https://github.com/django/django/blob/master/tests/modeltests/or_lookups/tests.pyएक मॉडल में दो दिनांक फ़ील्ड की तुलना में एक Django क्वेरीसेट फ़िल्टर कैसे बनाएं

इसके अलावा Stackoverflow पर यहां की खोज

stale_activities_queryset = Activity.objects.filter(updated__gte = self.added_toSolr_date) 

मॉडल

class Activity(models.Model): 
    # Last time entry/metric was updated in the Activity model database 
    updated = models.DateTimeField(verbose_name="CRUD date") 
    # When it was added to Solr Index Date 
    added_toSolr_date = models.DateTimeField(blank=True, null=True, verbose_name="Added to Solr Index Date") 

मैं Django क्वेरी डॉक्स संदर्भित किया है। सभी उदाहरण एक ही मॉडल में दो दिनांक फ़ील्ड की तुलना करने के बजाय एक प्रविष्टि तिथि का उपयोग करते हैं।

उत्तर

107

F objects.

from django.db.models import F 
stale_activities = Activity.objects.filter(updated__gte=F('added_toSolr_date')) 
+0

बहुत बहुत धन्यवाद! आपने यह कैसे खोजा? –

+3

@ करलोस फेररेरा, हर दिन django का उपयोग करने के वर्षों के माध्यम से। मैं वास्तव में कब नहीं कह सकता। –

+0

अच्छा समाधान! लगभग उसी प्रश्न को पोस्ट किया – Ron

1

युजी Tomita के समाधान, दुर्भाग्य से, काम नहीं किया।

नीचे एक मॉडल पर विचार करें:

class list(models.Model): 
    text = models.CharField(max_length=140) 
    created = models.DateTimeField() 
    modified = models.DateTimeField() 

क्वेरीसमूह:

my_list = todolist.objects.order_by('created').filter(created__gte=F('modified')) 

टेम्पलेट:

{% if my_list %} 
{% for list in my_list %} 
{{ list.text}} 
{% endfor %} 
{% else %} 
<p>there is no list</p> 
{% endif %} 

अंत मैं एक खाली सूची प्राप्त में, लेकिन मुझे पता है, ऐसा नहीं है सही बात। मैं भी टेम्पलेट (क्वेरीसमूह फिल्टर के बिना) के अंदर निम्नलिखित का इस्तेमाल किया है:

{% if list.created|date:'d m y h:i:s' == list.modified|date:'d m y h:i:s' %} 

यह काम किया, लेकिन मैं एक और अधिक सुरुचिपूर्ण समाधान को देखने के लिए पसंद करेंगे।

+0

एक त्वरित पढ़ने पर ऐसा लगता है कि आप अपने क्वेरीसेट फ़िल्टर और वाई हमारे टेम्पलेट कोड में दो अलग-अलग चीजें कर रहे हैं। पूर्व में आप 'gte' का उपयोग कर रहे हैं और बाद में आप '==' का उपयोग कर रहे हैं।क्या यही कारण है कि दोनों एक ही परिणाम नहीं देते हैं? मैं यह समझने की कोशिश कर रहा हूं कि 'mydate__exact = F (' my_other_date ') का उपयोग किसी क्वेरी में क्यों नहीं किया जाता है जब' my_other_date 'कोई नहीं है, स्वयं। – jenniwren

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