【发布时间】:2019-09-15 16:19:06
【问题描述】:
我试图弄清楚如何适当地创建 Order 和 Ticket 模型之间的关系。用户可以购买多张门票,并且会收到一个门票 ID——但是当用户支付门票数量(或门票 ID)时——我希望它显示带有门票 ID# 的订单 ID#。但是,我不确定如何创建 Ticket 和 Order 模型之间的关系。我什至需要 Order 才能加入 Ticket 模型吗?你有什么建议?我尝试使用 Order as many-to-many 与票的关系,但它似乎没有用。建议会有所帮助。
models.py
class User(models.Model):
first_name=models.CharField(max_length=100)
last_name=models.CharField(max_length=100)
email=models.CharField(max_length=100)
password=models.CharField(max_length=100)
created_at=models.DateTimeField(auto_now_add=True)
updated_at=models.DateTimeField(auto_now=True)
class Ticket(models.Model):
venue=models.CharField(max_length=100)
quantity=models.PositiveIntegerField()
price=models.DecimalField(default=25.00, max_digits=5, decimal_places=2, null=True, blank=True)
loop=models.CharField(max_length=100)
purchaser = models.ForeignKey(User, related_name="purchases", on_delete=models.PROTECT)
created_at=models.DateTimeField(auto_now_add=True)
updated_at=models.DateTimeField(auto_now=True)
class Order(models.Model):
full_name=models.CharField(max_length=100)
cc_number=models.PositiveIntegerField()
exp_date=models.PositiveIntegerField()
cvc=models.PositiveIntegerField()
buyers=models.ManyToManyField(Ticket, related_name="bought_tickets")-----THIS HAS BEEN DELETED
created_at=models.DateTimeField(auto_now_add=True)
updated_at=models.DateTimeField(auto_now=True)
```
【问题讨论】:
-
听起来你还在搞清楚,你到底想在你的数据库中表示什么。一旦你找到了一个坚实的目标,解决方案可能只是“点击”。我似乎不清楚的问题:购买的机票总是订单的一部分吗?用户是否在购买票证、票证、订单或订单?
-
@Bloodmallet:感谢您的回复。我制作了用户在会话中的顺序,他/她选择了他们想要的票数,然后必须为此付费,所以我认为 Order 模型适合与票证 ID 连接?需要一个订单模型来连接 Ticket ID 吗?
-
请注意,您不得这样定义您自己的用户模型。使用内置的,它会为您处理散列和检查密码。 (如果您将 AbstractUser 子类化,则可以定义您自己的,但在您的情况下似乎没有任何意义。)
-
听起来您希望用户始终获得订单。一个订单持有选定的工单。一个用户可以有多个订单。但是一个订单只能有一个所有者用户。一个订单可以有多个工单。一张票只能有一个订单。听起来用户不需要任何特殊字段。订单需要用户的外键。 Ticket 需要一个 ForeignKey 才能订购。这样所有提到的限制都到位。但请记住,如果您不小心,这种方式可能会出现空订单(没有票的订单)。
标签: django model many-to-many