【发布时间】:2019-04-04 01:33:49
【问题描述】:
我需要一些关于如何为表单创建动态选择字段的指导。上下文是任命的上下文。我想让人们能够预订自己的约会,但这需要基于一些标准。标准是日期、时间和人数。
我希望时间字段成为动态选择字段。基于日期和派对规模“psize” 我原本以为这可以通过过滤、聚合和求和来实现。使用提交人的输入。
我在想我可以从表格中获取日期和派对人数,并使用它来过滤和汇总选择相同选项的人数(这很重要,因为我希望 15 人或更少的人注册任何给定时间段)我的时间段以 15 分钟为增量,并列在一个元组中(如常规选择字段)。有什么想法吗?
models.py
class Reservation(models.Model):
"""This tuple is for the Inside, Outside, First Available
drop down menu for the reservations tab """
INSIDEOUTSIDE = (
('Inside','Inside'),
('Outside', 'Outside'),
('First Available', 'First Available'),
)
STATUS = (
('Reservation','Reservation'),
('Checked In','Checked In'),
('Seated','Seated'),
)
PARTYSIZE = (
(1,'1'),
(2,'2'),
(3,'3'),
(4,'4'),
(5,'5'),
(6,'6'),
(7,'7'),
(8,'8'),
(9,'9'),
(10,'10'),
(11,'11'),
(12,'12'),
)
TIMEPERIOD= (
('11:30','11:30'),
('11:45','11:45'),
('12:00','12:00'),
('12:15','12:15'),
)
name = models.CharField(max_length=22)
psize = models.IntegerField('Party Size', choices= PARTYSIZE)
Date = models.DateField()
Time = models.CharField(max_length=15, choices=TIMEPERIOD)
location = models.CharField(max_length=15, choices= INSIDEOUTSIDE, default= 'First Available')
status = models.CharField(max_length=15, choices=STATUS, default='Reservation')
下面是有效的过滤器,但不完全是。它返回我在其中键入的项目,我希望能够向它传递一个列表并让它使用零件大小“psize”进行计算,并将一个列表传递回具有可用时隙的表单(时隙人数少于 15 人,包括填入表格的人数)。
Reservation.objects.filter(Date='2018-01-01',Time='2:30').aggregate(Sum('psize'))
谁能指出我正确的方向?有什么想法吗?
更新 下面是我在 shell 中用来确定选择的代码。
def getchoices(request):
DATE = request.POST.get('Date')
psize_input = request.post.get('psize')
slots = Reservation.objects.filter(Date=DATE).values_list('Time').annotate(Sum('psize'))
TIMEPERIOD= (
('11:30','11:30'),
('11:45','11:45'),
('12:00','12:00'),
('12:15','12:15'),
('12:30','12:30'),
('12:45','12:45'),
('01:00','01:00'),
('01:15','01:15'),
('01:30','01:30'),
('01:45','01:45'),
('02:00','02:00'),
('02:15','02:15'),
('02:30','02:30'),
)
def checkpsize():
fullslots1=[]
fullslots2=[]
for object in slots:
if object[1] > 15-psize_input:
fullslots1.append(object[0])
fullslots2.append(object[0])
fullslotszip = zip(fullslots1, fullslots2)
fullslotstup = list(fullslotszip)
newchoices = list(filter(lambda x: x not in fullslotstup, TIMEPERIOD))
return newchoices
但是,我发现很难将其连接到我的表单。我似乎无法弄清楚如何在我的表单中实现 ajax 以根据 psize 和日期输入填充我的时间字段。关于开始的好地方有什么想法吗?可能是教程?
【问题讨论】:
标签: django python-3.x filter django-rest-framework aggregate