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

السؤال

Recommended Posts

  • 0
نشر

يمكنك تحويل حقل التاريخ في django إلى غرض من الصف datetime.datetime، حيث أن datatime هي المكتبة الأساسية في بايثون للتعامل مع التاريخ و الوقت. بعد التحويل يمكننا إضافة يوم باستعمال نفس المكتبة. يمكن القيام بكل ذلك كما يلي:

# لنفترض أن اسم الحقل الخاص بالتاريخ في النموذج هو 
# date_field

import datetime

tomorrow_date = self.date_field.date() + datetime.timedelta(days=1)

لإضافة رسالة عندما يأتي هذا اليوم يمكنك استعمال الجافا سكربت، حيث أنه يمكنك كتابة view تمثل endpoint على السيرفر، بحيث يقوم كود الجافا سكربت باستدعاءه كل فترة للتحقق من الوقت.

و عندما نصل إلى الوقت المحدد نظهر رسالة.

طريقة أخرى هي إضافة مهمة مجدولة في دجانغو.

مثلاً يمكن إضافة مهمة يومية بواسطة مكتبة celery كما يلي:

from celery.schedules import crontab
from celery.task import periodic_task

@periodic_task(run_every=crontab(minute=0, hour=0))
def every_day():
    print("سيتم طباعة هذه الرسالة كل يوم في منتصف اللليل")

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

  • 0
نشر

يمكن القيام بذلك باستخدام مكتبة datetime المدمجة في Python و Django.

في ملف العرض views.py، يمكن استيراد datetime والوصول إلى حقول النموذج الخاصة بالتاريخ في الطلب وتطبيق العمليات الحسابية عليها.

يمكن استخدام دالة timedelta لإضافة يوم واحد إلى التاريخ والحصول على التاريخ التالي.

على سبيل المثال، يمكن استخدام الكود التالي:

from datetime import datetime, timedelta
from django.shortcuts import render

def my_view(request):
    today = datetime.today().date()  # الحصول على التاريخ الحالي
    tomorrow = today + timedelta(days=1)  # الحصول على التاريخ التالي
    message = ''
    if today == my_model.date_field:  # إذا كان التاريخ الحالي هو نفس التاريخ المخزن في حقل التاريخ في النموذج
        message = "Today is the date!"  # إضافة رسالة إذا كان اليوم هو نفس التاريخ المخزن في حقل التاريخ

    context = {
        'today': today,
        'tomorrow': tomorrow,
        'message': message
    }
    return render(request, 'my_template.html', context)

في هذا المثال، يتم استخدام "datetime.today().date()" للحصول على التاريخ الحالي، ثم يتم إضافة يوم واحد باستخدام "timedelta(days=1)" للحصول على التاريخ التالي. ثم يتم فحص ما إذا كان التاريخ الحالي يساوي التاريخ المخزن في حقل التاريخ في النموذج، وإذا كان الأمر كذلك، يتم تعيين الرسالة المطلوبة.

يمكن إضافة هذا الكود إلى دالة العرض في views.py، ويتم تمرير السياق الذي يحتوي على المتغيرات "today" و "tomorrow" و "message" إلى قالب HTML الذي يتم استخدامه لعرض الصفحة.

على سبيل المثال، يمكن إنشاء ملف قالب HTML جديد بعنوان "my_template.html" ويمكن استخدام الكود التالي كمثال:

<!DOCTYPE html>
<html>
<head>
    <title>My Template</title>
</head>
<body>
    <p>Today's date is {{ today }}.</p>
    <p>Tomorrow's date is {{ tomorrow }}.</p>
    {% if message %}
        <p>{{ message }}</p>
    {% endif %}
</body>
</html>
  • 0
نشر

بالإضافة إلى ما تم ذكره، تستطيع استخدام إشارات Django لتنفيذ العملية الحسابية وعرض الرسالة المناسبة عند وصول تاريخ محدد في حقل التاريخ في نموذج Django.

وإليك مثال لكيفية تنفيذ ذلك باستخدام إشارات Django:

1- في ملف models.py الخاص بالمشروع، استورد الإشارات والمكتبة datetime:

from django.db import models
from django.db.models.signals import post_save
from django.dispatch import receiver
from datetime import date

class YourModel(models.Model):
    date_field = models.DateField()

@receiver(post_save, sender=YourModel)
def check_date(sender, instance, **kwargs):
    if instance.date_field == date.today():
        # تنفيذ العملية الحسابية
        next_day = instance.date_field + timedelta(days=1)
        # عرض الرسالة
        print("تاريخ اليوم هو اليوم!")

قمت باستيراد الإشارات والمكتبة datetime. ثم تعريف نموذج (YourModel) الذي يحتوي على حقل التاريخ (date_field).

ثم تعريف دالة إشارة (signal function) باستخدام الديكورات (decorators) @receiver و @post_save للتأكيد على أن الدالة تستجيب لحدث حفظ النموذج بعد الحفظ.

وفي تلك الدالة، يتم التحقق مما إذا كان حقل التاريخ في النموذج يساوي تاريخ اليوم، وإذا كان الأمر كذلك، تنفذ العملية الحسابية المطلوبة (وفي المثال تم طباعة اليوم التالي) وعرض الرسالة.

تأكد من تسجيل الإشارة في ملف المشروع (apps.py) للتأكد من استدعائها عند تشغيل المشروع.

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...