Database 使用Django销售活动门票的网站中的数据库设计
我在一个网站上工作,该网站出售活动门票。我的设计如下: 以及(简化过帐)模型:Database 使用Django销售活动门票的网站中的数据库设计,database,django,database-design,django-models,Database,Django,Database Design,Django Models,我在一个网站上工作,该网站出售活动门票。我的设计如下: 以及(简化过帐)模型: 我应该如何添加票证型号?因为票证是针对特定日期的事件,所以我需要将票证与事件和日期之间的关系联系起来 一个票证类别还应该有一个“最大”字段,其中存储了在特定日期该特定票证类别可出售的最大票证。例如:活动“Metallica”有票务等级“Field”和票务等级“VIP”,都在三个不同的日期。我如何在特定日期获取Ticket_课程的剩余票数?也许要计算当天该事件对应的票证表中有多少张票 我希望我说清楚,英语不是我的第一
我希望我说清楚,英语不是我的第一语言。请随时询问任何疑问活动似乎需要一个票证金额字段来验证最大票证数量。然后它应该与ticket_类具有外键关系。为了确保不超过可用票证的数量,在将票证与事件关联时,可能需要使用clean方法之类的方法来验证其不超过
我只是从一个较高的角度来看这件事,所以我可能遗漏了一些东西。我也不清楚为什么不能将日期作为活动的一个字段 我认为你的设计应该是这样的:
class Event(models.Model):
name = models.CharField(max_lenght=20)
class Date(models.Model):
event_start = models.DateTimeField()
event_end= models.DateTimeField()
class Ticket_Class(models.Model):
name = models.CharField(max_lenght=20)
price = models.IntegerField()
type= models.CharField(max_lenght=20)
class EventTicketSell(models.Model):
event= models.ForeignKey(Event)
date= models.ForeignKey(Date)
ticket= models.ForeignKey(Ticket_Class)
max_sellable_tickets= models.IntegerField()
这种设计的原因是,您可以将事件添加到EventTicketSell类,然后使用最大可销售票证分配日期和票证
添加票证/日期/事件:
event1= Event(name= "Lion King")
event1.save()
event2= Event(name= "Metallica")
event2.save()
vip_ticket= Ticket_Class(name='VIP', price= 100, type='VIP')
vip_ticket.save()
evening_show= Date(event_start='Date Object', event_end= 'Date Object') # Date Object is like datetime.datetime.now()
evening_show.save()
concert_ticket_sell= EventTicketSell(event=event1, ticket=vip_ticket, date= evening_show, max_sellable_ticket=500)
concert_ticket_sell.save()
movie_ticket_sell= EventTicketSell(event=event2, ticket=vip_ticket, date= evening_show, max_sellable_tickets=500)
movie_ticket_sell.save()
这种设计将保持对象的可重用性和修改的灵活性。例如,如果您想更改最大可售车票,则:
movie_ticket_sell= EventTicketSell.objects.filter(event__name='Lion King', date__event_start= datetime.datetime.now(), ticket__type= 'VIP')[0]
movie_ticket_sell.max_sellable_tickets -= form.cleaned_data['ticket_sold'] #for example we get sold count from form
movie_ticket_sell.save()
因为一个活动可以有多个日期,也许“Shows”是一个更好的词。“冰上狮子王”活动可在周五、周六和周日举行。
movie_ticket_sell= EventTicketSell.objects.filter(event__name='Lion King', date__event_start= datetime.datetime.now(), ticket__type= 'VIP')[0]
movie_ticket_sell.max_sellable_tickets -= form.cleaned_data['ticket_sold'] #for example we get sold count from form
movie_ticket_sell.save()