【问题标题】:Getting the amount of guests in bookings made djangodjango 获取预订中的客人数量
【发布时间】:2017-09-03 22:54:30
【问题描述】:

如果每个用户都参加一个活动,他们可以进行预订,但每个活动只有一定数量的开放空间。

如果 10 个席位还剩 5 个,我想显示。 我似乎无法找到已预订且处于活动或待定状态的客人总数。

这是我的事件模型

class Events(models.Model):

ACTIVE = (('d', "Deactivated"), ('e', "Expired"), ('a', "Active"), ('b', "Drafts"),)
ALCOHOL = (('0','No bring own alcohol'),('1','There will be complimentary wine pairing'))

user = models.ForeignKey(User, on_delete=models.CASCADE)
active = models.CharField(max_length=1, default='b', choices=ACTIVE)
title = models.CharField(max_length=50, blank=True, default='')
description = models.TextField(max_length=500, blank=True, default='')
date = models.DateField()
time = models.TimeField()
price = models.CharField(max_length=240, blank=True, default='')
seats = models.IntegerField()
alcohol_choice = models.CharField(max_length=1, default='n' ,choices=ALCOHOL)
starter = models.TextField(max_length=350, blank=True, default='')
main_menu = models.TextField(max_length=350, blank=True, default='')
dessert = models.TextField(max_length=350, blank=True, default='')
notes = models.TextField(max_length=350, blank=True, default='')
created_date = models.DateTimeField(auto_now_add=True)
modified_date = models.DateTimeField(auto_now=True)

@property
def bookings_total(self):
    return self.user.bookings_set.filter(bookingstatus='y').count()

这是我的预订模型

class Bookings(models.Model):

OPTIONS_STATUS = (('y', "Yes"), ('n', "No"), ('p', "Pending"),)

user = models.ForeignKey(User, on_delete=models.CASCADE)
event = models.ForeignKey(Events, on_delete=models.CASCADE)
eventdate = models.DateField()
event_amount = models.CharField(max_length=50, blank=True, default='')
guests = models.IntegerField()
bookingstatus = models.CharField(max_length=50, default='p', blank=True, choices=OPTIONS_STATUS)
created_date = models.DateTimeField(auto_now_add=True)
modified_date = models.DateTimeField(auto_now=True)

这是我的观点代码

 today = datetime.now().strftime('%Y-%m-%d')

 events_list_data = Events.objects.filter(active='a').filter(Q(date__gte=today)|Q(date=today)).order_by('date')

这是我的模板代码

 {% for event_list in events_list_data %}
    -- CODE GOES HERE --
    {{ event_list.bookings_total }} Seats Left
 {% endfor %} 

【问题讨论】:

  • 计算views.py中剩下的座位数。

标签: python django


【解决方案1】:

如果我理解正确,你可以试试

@property
def bookings_total(self):
    return self.bookings_set.filter(bookingstatus='y').count()

@property
def bookings_left(self):
    return self.bookings_total - self.seats

【讨论】:

    【解决方案2】:

    试试:

     events = Events.objects.filter(active='a').\
     filter(Q(date__gte=today)|Q(date=today)).order_by('date')
    
     events = events.filter(Q(booking__bookingstatus='n')|Q(booking__bookingstatus='p'))
     events = events.annotate(num_of_seats=Count('booking'))
    

    现在您可以使用.num_of_seats 来显示活动中的座位数。

    在 html 文件中:

    {% for event in events %}
          {{event.title}}
          {{even.num_of_seats}}
    {% endfor %}
    

    【讨论】:

      猜你喜欢
      • 2019-06-14
      • 2019-10-16
      • 2015-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-28
      相关资源
      最近更新 更多