Джанго: Есть ли способ иметь «уникальный диапазон дат»? - PullRequest
4 голосов
/ 03 июня 2010

Если моя модель для предметов:

class Item(models.Model):
    name = models.CharField(max_length=500)
    startDate = models.DateField("Start Date", unique="true")
    endDate = models.DateField("End Date")      

Каждый Элемент должен иметь уникальный диапазон дат. Например, если я создаю Элемент , который имеет диапазон дат от 1 июня до 8 июня, как я могу сохранить и Элемент с диапазоном дат от 3 июня до 5 июня создан (или выдает ошибку с логикой шаблона)?

ПОЖАЛУЙСТА дайте мне знать, если я смогу лучше уточнить этот вопрос!

1 Ответ

7 голосов
/ 03 июня 2010

Вы не можете применить это на уровне модели, однако вы можете переопределить метод сохранения на как то так:

class Item(models.Model):
    name = models.CharField(max_length=500)
    startDate = models.DateField("Start Date", unique="true")
    endDate = models.DateField("End Date")     

    def save(self, *args, **kwargs):
        try:
            Item.objects.get(Q(startDate__range=(self.startDate,self.endDate))|Q(endDate__range=(self.sartDate,self.endDate))|Q(startDate__lt=self.startDate,endDate__gt=self.endDate))
            #raise some save error
        except Item.DoesNotExist:
            super(Item,self).save(*args,**kwargs)

edit: может быть, проверка диапазона дат может пройти легче, долгое время с тех пор, как я это сделал, но она показывает общую концепцию:).

...