В моделях django, как добавить ограничение, которое просматривает несколько строк

В приведенной ниже модели я определяю пользователя, привычку, которую пробует пользователь, дату начала (обязательно) и дату окончания (если привычка закончилась). Я хочу добавить ограничение, согласно которому каждый пользователь может быть активен только в одной привычке одновременно. Концептуально существует несколько способов определить это: Для конкретного пользователя только одна привычка имеет дату окончания NULL или для конкретного пользователя диапазон начало-конец не пересекается ни для одной из его привычек и т.д. Я не уверен, как подойти к написанию этого ограничения, поскольку оно рассматривает несколько строк, а не проверяет валидность в одной строке. Любая помощь в начале работы будет принята с благодарностью.

from django.db import models
from django.contrib.auth.models import User
from django.db.models import F, Q

class HabitChoices(models.TextChoices):
    NUTRITION = 'nutrition', 'Nutrition'
    EXERCISE = 'exercise', 'Exercise'
    SLEEP = 'sleep', 'Sleep'
    STRESS = 'stress', 'Stress'
    ALCOHOL = 'alcohol', 'Alcohol'
    SMOKING = 'smoking', 'Smoking'

class HabitStatus(models.Model):
    """ This model keeps track, at a high level, of which habit the user is currently in.
    """
    user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True)
    habit_name = models.CharField(max_length=10, choices=HabitChoices.choices, default=HabitChoices.NUTRITION)
    start_date = models.DateField()
    end_date = models.DateField(null=True, blank=True)

    def is_current_habit(self):
        if self.end_date == None:
            return True
        else:
            return False
    
    class Meta:
        constraints = [
            models.CheckConstraint(
                check=Q(start_date_lte=F('end'), start_date_gte=Now),
                name='correct_datetime'
            )
        ]
Вернуться на верх