查找时间范围以限制日历中同一时间发生的事件。 (django)
Posted
技术标签:
【中文标题】查找时间范围以限制日历中同一时间发生的事件。 (django)【英文标题】:Finding the Time Range to restrict the events occuring on same time in calendar. (django) 【发布时间】:2021-03-12 16:31:21 【问题描述】:我想限制重叠在同一日期和同一时间发生的事件。当用户在同一日期和同一时间注册事件时,我想向用户显示重叠错误。我无法查询 start_time 和 end_time 之间的时间范围。限制重叠的最佳方法是什么?
models.py
class Event(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
title = models.CharField(max_length=200)
description = models.TextField()
date = models.DateField()
start_time = models.TimeField()
end_time = models.TimeField()
created_date = models.DateTimeField(auto_now_add=True)
group = models.ForeignKey(Group , on_delete= models.CASCADE , null= True , blank=True)
priority = models.ForeignKey('Priority' , on_delete= models.CASCADE , null= True , blank=True)
@property
def get_html_url(self):
url = reverse('event-detail', args=(self.id,))
return f' <a href="url"> self.title </a>'
def create_event(slef):
return f"http://localhost:800/event/create/"
# def get_event_in_current_date(self):
# print(Event.objects.filter(date= self.date))
# return Event.objects.filter(date= self.date)
@property
def get_all_events(self):
if Event.objects.filter(date= self.date).count() >1:
url = reverse('event-all', args=(self.date, ))
return f' <a href="url"> ... </a>'
return ""
@property
def get_all_events_by_group(self):
print(self.group)
if Event.objects.filter(date= self.date , group= self.group ).count() >1:
url = reverse('event-all-group', args=(self.date, self.group.name ))
return f' <a href="url"> ... </a>'
return ""
def __str__(self):
# print(self.date)
return str(self.date)
views.py
class CreateEvent(LoginRequiredMixin , View):
def post(self , request , *args , **kwargs):
start_time = request.POST.get('start_time')
end_time = request.POST.get('end_time')
title = request.POST.get('title')
description = request.POST.get('description')
date = request.POST.get('date')
priority = request.POST.get('priority')
GROUP_REQUEST_SLUG = str(request.META.get('HTTP_REFERER'))
group_slug = GROUP_REQUEST_SLUG.split('/')[-2]
group = Group.objects.filter(slug = group_slug).first()
priority = Priority.objects.create(scale =priority )
if group is None:
Event.objects.create(date= date , title = title , start_time= start_time , end_time=end_time ,description= description , user= request.user , priority = priority)
messages.success(request, "Event has been createds .")
else:
Event.objects.create(date= date , title = title , start_time= start_time , end_time=end_time ,description= description , user= request.user , group= group , priority = priority)
messages.success(request, f"Event has been created in group")
return redirect('switch-group' ,group_slug )
return redirect('calendar')
【问题讨论】:
【参考方案1】:Django 提供了一个range
lookup
Event.objects.filter(date__range=["2011-01-01", "2011-01-31"])
或
Event.objects.filter(pub_date__time__range=(datetime.time(8), datetime.time(17)))
或者你也可以使用gt
,gte
,lt
,lte
lookups
我认为您必须将unique_together
用于您的Event
模型(more info)。
unique_together = ['date', 'start_time']
【讨论】:
感谢您的回复。那在我的情况下不起作用,你能详细说明一下吗?那太好了。 什么不起作用?你能具体说明你的问题吗? 我在 Models.py 中使用 unique_together 作为 Meta 类,但仍然无法正常工作。 虽然这并没有给出任何错误!我真的很想获得时间(用户输入)并想将它与我的数据库中存在的时间进行比较。所以没有任何事件可以与时间重叠。以上是关于查找时间范围以限制日历中同一时间发生的事件。 (django)的主要内容,如果未能解决你的问题,请参考以下文章