اذهب إلى المحتوى

السؤال

نشر (معدل)

أحاول البحث عن كائنات من نموذج User من خلال قيمة الحقل  DateTimeField. من خلال الكود التالي:

User.objects.filter(datetime_registred=datetime.date(2021,9,12))

أحصل على كائن queryset  فارغ، أعتقد لأنني لم أحدد وقت في عملية البحث، حيث وضعت تاريخ فقط، لكنني أريد أي وقت خلال اليوم المحدد. أي أني أريد تحديد كل المستخدمين الذين سجلوا خلال هذا اليوم

هل هناك طريقة سهلة في Django للقيام بذلك؟

تم التعديل في بواسطة Amer Abdallah

Recommended Posts

  • 1
نشر

يمكنك أن تستخدم الخاصية contains على النحو التالي:

User.objects.filter(datetime_registred__contains=datetime.date(2021,9,12))

أو يمكنك تحديد السنة والشهر واليوم يدويًا، وبالتالي سيتم تحديد كل المستخدمين الذين سجلوا في الموقع في هذا اليوم فقط بغض النظر عن وقت التسجيل:

User.objects.filter(datetime_published__year='2021', 
                         datetime_published__month='09', 
                         datetime_published__day='12')

وإن كنت تستخدم الإصدار 1.9 أو احدث من جانغو Django فيمكنك أن تستخدم الخاصية date، كالتالي:

User.objects.filter(datetime_registred__date=datetime.date(2021, 9, 12))

 

  • 0
نشر (معدل)

يتم تنفيذ عمليات البحث هذه في django.views.generic.date_based على النحو التالي:

{'date_time_field__range': (datetime.datetime.combine(date, datetime.time.min),
                            datetime.datetime.combine(date, datetime.time.max))} 

كما يمكنك استخدام الخاصية startswith كالتالي:

from datetime import date
today = date.today()
Model.objects.filter(date_created__startswith=today)

أو من خلال الخاصية gte:

Model.objects.filter(date_created__gte=today)

وبشكل عام فإن الخاصية contain التي ذكرها سامح والخاصية startswith  تعتبران الأسرع

تم التعديل في بواسطة Ali Haidar Ahmad
  • 0
نشر

في البداية عليك أن تتأكد من أن كل البيانات على شكل datetime لان غير ذلك قد يسبب أخطاءا عن البحث:

import datetime

date_from = datetime.datetime.strptime(request.GET['q1'], '%Y-%m-%d')
date_to = datetime.datetime.strptime(request.GET['q2'], '%Y-%m-%d')

بعد ذلك تقوم بالبحث عن التواريخ التى تريد الحصول عليها ببساطة باستخدام الكود التالي:

datetime = User.objects.filter(created__range=(date_from, date_to))

 

  • 0
نشر

أفضل حل تم نشره لـ Django الاصدارين  1.7 ، 1.9  هو تسجيل تحويل (register a transform) كالتالي

from django.db import models

class MySQLDatetimeDate(models.Transform):
    lookup_name = 'date'
    def as_sql(self, compiler, connection):
        lhs, params = compiler.compile(self.lhs)
        return 'DATE({})'.format(lhs), params
    @property
    def output_field(self):
        return models.DateField()

يؤدي هذا إلى تنفيذ بحث SQL مخصص عند استخدام "__date" مع datetimes. لتمكين التصفية على التواريخ التي تقع في تاريخ معين ، قم باستيراد هذا التحويل وتسجيله في DateTimeField, ثم يمكنك استخدامه في عوامل التصفية الخاصة بك كالتالي

Foo.objects.filter(created_on__date=date)

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...