Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 使用Django销售活动门票的网站中的数据库设计_Database_Django_Database Design_Django Models - Fatal编程技术网

Database 使用Django销售活动门票的网站中的数据库设计

Database 使用Django销售活动门票的网站中的数据库设计,database,django,database-design,django-models,Database,Django,Database Design,Django Models,我在一个网站上工作,该网站出售活动门票。我的设计如下: 以及(简化过帐)模型: 我应该如何添加票证型号?因为票证是针对特定日期的事件,所以我需要将票证与事件和日期之间的关系联系起来 一个票证类别还应该有一个“最大”字段,其中存储了在特定日期该特定票证类别可出售的最大票证。例如:活动“Metallica”有票务等级“Field”和票务等级“VIP”,都在三个不同的日期。我如何在特定日期获取Ticket_课程的剩余票数?也许要计算当天该事件对应的票证表中有多少张票 我希望我说清楚,英语不是我的第一

我在一个网站上工作,该网站出售活动门票。我的设计如下:

以及(简化过帐)模型:

  • 我应该如何添加票证型号?因为票证是针对特定日期的事件,所以我需要将票证与事件和日期之间的关系联系起来
  • 一个票证类别还应该有一个“最大”字段,其中存储了在特定日期该特定票证类别可出售的最大票证。例如:活动“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()