Django admin добавление записи с помощью сигнала

У меня нет проблем с сохранением записи при входе пользователя, проблема в том, что, например, пользователь входит в систему 19 июня 2022 года 8 утра и случайно выходит из системы, и если этот пользователь входит снова, я не хочу, чтобы данные вставлялись снова, я просто хочу, чтобы вставлялась 1 запись в день, даже если пользователь входит несколько раз

class UserLogs(models.Model):
    user = models.OneToOneField(User, related_name="profile", on_delete=models.CASCADE)
    time_in = models.DateTimeField(null=True, blank=True)
    time_out = models.DateTimeField(null=True, blank=True)

    @receiver(user_logged_in)
    def post_login(sender, request, user, **kwargs):
        print(user)
        insert = UserLogs(
            fullname = user,
            time_in = datetime.now()
        )
        print(insert.id)
        if insert.id.exists():
            insert.save()
        else:
            print('dont save!')

Вы можете проверить, вошел ли пользователь в систему сегодня:

from django.utils import timezone

@receiver(user_logged_in)
def post_login(sender, request, user, **kwargs):
    now = timezone.now()
    old_record = UserLogs.objects.filter(
        fullname=user, time__date=now.date(),
    ).first()
    if old_record is not None:
        # Already logged in today
        return  # or update if you need

    # Otherwise create new record
    UserLogs.objects.create(
        fullname=user,
        time_in=now,
    )

Обратите внимание, что обработка дат может привести к неожиданным результатам, если ваши пользователи находятся в разных часовых поясах. Он будет сверять даты с часовым поясом сервера (настройка TIME_ZONE).

Вернуться на верх