Модели Django: многие ко многим или один ко многим - PullRequest
0 голосов
/ 26 апреля 2019

Я пытаюсь понять, как правильно создать отношения между моделями Order и Ticket. Пользователь может приобрести много билетов, и вместе с этим он получит идентификатор билета, но когда пользователь оплачивает количество билетов (или идентификатор билета), я хочу, чтобы он показал номер заказа с номером билета. Однако я не уверен, как создать отношения между моделями Ticket и Order. Нужно ли мне даже объединить Заказ с моделями Билетов? Что ты предлагаешь? Я пытался использовать Order как отношение многие ко многим с билетом, но, похоже, это не сработало. Предложения будут полезны.

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)
    ```

Ответы [ 2 ]

1 голос
/ 26 апреля 2019

В порядке, я бы предложил ForeignKey с пользователем, а также ForeignKey с Ticket. Один пользователь может иметь несколько билетов и несколько заказов. В одном заказе может быть несколько билетов.

0 голосов
/ 26 апреля 2019

Существует несколько возможностей в зависимости от того, что вы хотите сделать с этим Орденом позже.

Если Заказ основан на билете (один заказ на каждый проданный билет):

  1. Билет и заказ должны иметь отношение OneToOne: каждый билет приведет только к одному заказу, а один заказ приведет к обратному билету.
  2. Таким образом, вы можете отфильтровать все билеты, купленные конкретным пользователем и получить заказ, как, а затем получить доступ к каждому билету заказа:

Связанный код:

user_tickets = Ticket.objects.filter(purchaser='a scpecific user_id')
for ticket in user_tickets:
     print(ticket.order.id)

Если Заказ основывается на клиенте (Один заказ связан с Пользователем и содержит несколько билетов), вам следует добавить ForeignKey для Пользователя в Заказе и ForeignKey для Заказа в билете:

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)
    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...