Reputation: 61
I am trying to figure how to appropriately create the relationship between Order and Ticket models. The user can purchase many tickets, and with it will receive a Ticket ID--but when the User pays the amount of tickets (or ticket ID)--I want it to show the Order ID# with the Ticket ID#. However, I am unsure how to create the relationship between Ticket and Order models. Would I even need Order to be joined with Ticket models? What would you suggest? I tried using Order as many-to-many relationship with ticket, but it didn't seem to work. Suggestions would be helpful.
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)
```
Upvotes: 0
Views: 224
Reputation: 1234
There is severall possibilities depending on what you want to do with this Order later on.
If the Order is ticket-based(one order per ticket sold):
Associated code:
user_tickets = Ticket.objects.filter(purchaser='a scpecific user_id')
for ticket in user_tickets:
print(ticket.order.id)
If the Order are client based (One order is linked to a User and contains severall tickets) then you should add ForeignKey to User in Order and a ForeignKey to Order in ticket:
class Order(models.Model):
...
buyer=models.ForeignKey(User, related_name="bought_tickets")
...
class Ticket(models.Model):
purchaser = models.ForeignKey(User, related_name="purchases", on_delete=models.PROTECT)
order = models.ForeignKey(Order)
...
Upvotes: 0
Reputation: 1926
In Order I would suggest a ForeignKey with User as well as a ForeignKey with Ticket. One User may have multiple Tickets and multiple Orders. One Order may have multiple Tickets.
Upvotes: 1