Django позволяет создавать объект только один раз в 24 часа

Вот моя модель Django:

class mymodel(models.Model):
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    deleted_at = models.DateTimeField(null=True, blank=True)

Как сделать так, чтобы объект создавался только один раз в 24 часа? Я знаю, что это можно сделать с помощью unique_for_date, но не могу понять как. https://docs.djangoproject.com/en/4.1/ref/models/fields/#unique-for-date

Кроме того, я хочу показывать ошибку, если пользователь хочет создать более одного раза за 24 часа.

unique_for_date работает только в случае ModelForm. Также, если это поле перечислено в excluded, оно пропустит валидацию. Согласно документации

Это обеспечивается Model.validate_unique() во время проверки модели но не на уровне базы данных. Если какое-либо ограничение unique_for_date включает поля, которые не являются частью ModelForm (например, если одно из полей одно из полей находится в списке исключений или имеет значение editable=False), Model.validate_unique() пропустит проверку для этого конкретного ограничения. ограничение.

Я бы предложил переопределить метод сохранения вашей модели

class MyModel(models.Model):
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    deleted_at = models.DateTimeField(null=True, blank=True)

    def save(self, *args, **kwargs):
        try:
            date_from = datetime.datetime.now() - datetime.timedelta(days=1)
            MyModel.objects.get(created_at__gte=date_from)
            # raise some save error
        except MyModel.DoesNotExist:
            super(MyModel,self).save(*args,**kwargs)
from datetime import datetime
from dateutil.relativedelta import relativedelta
new_entry_datetime = datetime(2022, 9, 13, 15, 00, 00)
exising_created_datetime=datetime.now()
next_24 = exising_created_datetime + relativedelta(hours=+24)
if exising_created_datetime <= new_entry_datetime and new_entry_datetime <= next_24:
    print("should not")
else:
    print("should create")
Вернуться на верх