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

البحث في نموذج من خلال حقل DateTime في جانغو Django

Amer Abdallah

السؤال

أحاول البحث عن كائنات من نموذج 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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...