我正在开发用于电影院座位预订的应用程序,但遇到了麻烦,设计了我的models
这是我目前的型号:
from django.db import models
from django.contrib.auth import get_user_model
class Seats(models.Model):
seat_choice = (
('AA', 'AA'),
('AB', 'AB'),
('BA', 'BA'),
('BB', 'BB'),
('CA', 'CA'),
('CB', 'CB')
)
name = models.CharField(choices=seat_choice, max_length=2)
def __str__(self):
return self.name
class Show(models.Model):
show_choice = (
('MORNING', 'MORNING'),
('NIGN', 'NIGHT'),
)
show_schedule = models.CharField(choices=show_choice, max_length=10)
movie = models.CharField(max_length=50)
class Booking(models.Model):
seat = models.OneToOneField(Seats, on_delete=models.CASCADE)
user = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)
show = models.ForeignKey(Show, on_delete=models.CASCADE)
class Meta:
db_table = 'booking_booking'
constraints = [
models.UniqueConstraint(fields=['seat', 'show'], name='unique booking')
]
我试图实现的目标是,如果预订了某个演出的座位,以后就不能再次预订,但是以后可以再预定另一个演出。
但是我当前的模特问题是:如果我预定一个演出的座位,我不能预定同一座位的另一个演出(这是我不想的)
我的要求很简单:如果我为某个演出预定座位,以后我应该可以为另一个不同的演出预定同一个座位,但是不能为同一演出再次预定...
我知道我可以实现删除演出并使用如下所示的创建方式:
class Booking(models.Model):
seat = models.OneToOneField(Seats, unique_for_date='created', on_delete=models.CASCADE)
user = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)
created = models.DateField(auto_now_add=True)
但是我不想这样。我需要尽一切可能保持表演场……
答案 0 :(得分:0)
由于您与Seat
的关系,目前每个OneToOne
只能进行一次预订:
class Booking(models.Model):
seat = models.OneToOneField(Seats, on_delete=models.CASCADE)
将其更改为ForeignKey
,以便一个Seat
可以与多个Booking
相关联:
seat = models.ForeignKey(Seats, on_delete=models.CASCADE)