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

السؤال

Recommended Posts

  • 0
نشر

يمكنك جدولة مهمة يومية للقيام بذلك.

يمكن استعمال مكتبة 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("سيتم طباعة هذه الرسالة كل يوم في منتصف اللليل")

طبعاً بدل الطباعة ما ستقوم به هو المرور بحلقة for لها 10 تكرارات و كل مرة تقوم بإنشاء فلاش كارد و إضافتها.

أي سيكون الكود الخاص بك شيء مثل ما يلي:

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

@periodic_task(run_every=crontab(minute=0, hour=0))
def every_day():
    for i in range(10):
      flash_card = FlashCard.objects.create(هنا نضع ما يلزم لهذا الغرض)
      

الطريقة create ستقوم بإنشاء هذا الغرض و كما هو موضح يجب تمرير ما يلزم من أجل هذه الفلاش كارد، مثلاً عنوانها أو أي حقل تحتاجه.

  • 0
نشر

تستطيع تحديد عدد معين من السجلات الجديدة في Django باستخدام:

- Model Manager
- Limiting queryset

في حالتك، يمكنك عمل التالي:

  •  أنشئ Manager خاص بـ Flashcard
from django.db import models

class FlashcardManager(models.Manager):
    def create_flashcards(self, num):
        for i in range(num):
            Flashcard.objects.create()

class Flashcard(models.Model):
    objects = FlashcardManager()  
    # use the custom manager


 استدعي `.create_flashcards(10)` كل يوم لإنشاء 10 فلاش كارد فقط.

from .models import Flashcard 

Flashcard.objects.create_flashcards(10)

يمكن أيضًا استخدام `.bulk_create()` وتحديد عدد السجلات:

Flashcard.objects.bulk_create([Flashcard() for i in range(10)])

أو استخدام `queryset.limit()`:

for i in range(10):
    Flashcard.objects.create() 

هذه الطرق ستضمن إنشاء 10 فلاش كارد فقط كل يوم. تستطيع اختيار الطريقة المناسبة لك.

  • 0
نشر

تستطيع الإعتماد على الطريقة pre_save في نموذجك لتحديد عدد السجلات التي سيتم إضافتها، وذلك من خلال إضافة حقل في النموذج لتعقب عدد السجلات المضافة في اليوم الحالي وتحديثها بناءً على ذلك.

from django.db import models
from django.utils import timezone

class Flashcard(models.Model):
    # تعريف حقول النموذج الأخرى هنا

    created_at = models.DateTimeField(auto_now_add=True)
    day_count = models.PositiveIntegerField(default=0)

    def save(self, *args, **kwargs):
        if not self.pk:  # إذا كان السجل جديدًا
            today = timezone.now().date()

            # الحصول على عدد السجلات المضافة في اليوم الحالي
            flashcard_count = Flashcard.objects.filter(created_at__date=today).count()

            # التحقق مما إذا كان عدد السجلات المضافة يساوي 10
            if flashcard_count >= 10:
                raise ValueError("You have reached the maximum number of flashcards for today.")

            # زيادة عدد السجلات المضافة في اليوم الحالي بمقدار واحد
            self.day_count = flashcard_count + 1

        super(Flashcard, self).save(*args, **kwargs)

هنا يتم إضافة حقل day_count لتعقب عدد السجلات المضافة في اليوم الحالي، وتحديد الحد الأقصى لعدد السجلات هو 10، وإذا تمت محاولة إضافة المزيد من السجلات، سيتم رفع استثناء ValueError.

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...