Как создать 100 экземпляров модели автоматически после создания новой модели? - PullRequest
1 голос
/ 14 января 2020

Я работаю над приложением бронирования в кинотеатре. Я уже создал стол во внешнем интерфейсе, содержит 100 мест (10 рядов х 10 мест). Каждое место "тд". Я думал о том, чтобы сделать каждый тд объектом объекта, чтобы потом можно было легко назначать пользователей. Основываясь на max_seats основной модели, я хочу создать объекты. После добавления нового mov ie в БД объекты должны быть созданы автоматически. Любая идея или подсказка, с чего начать?

Моя основная модель:

class Movies(models.Model):
    title = models.CharField(max_length=100)
    price = models.FloatField()
    max_seats = models.IntegerField(default=100)

И модель, где мне нужно создать объекты:

class Seat(models.Model):
    customer = models.ForeignKey(User, on_delete=models.CASCADE, default=None)
    movie = models.ForeignKey(Movies, on_delete=models.CASCADE)
    row = models.CharField(max_length=1)
    number = models.IntegerField()

1 Ответ

0 голосов
/ 14 января 2020

Вы можете сделать это с вашим текущим ForeignKey и создать места в views.py или в любом другом месте вашего кода. Вы также можете получить доступ к списку мест с помощью функции getSeatsList ниже:

Ваша модель ie:

class Movies(models.Model):
    title = models.CharField(max_length=100)
    price = models.FloatField()
    max_seats = models.IntegerField(default=100)

    def __init__(self, *args, **kwargs):
        super(Movies, self).__init__(*args, **kwargs)
        # Change Movies field if necessary here

        for i in range(self.max_seats):
            new_seat = Seat()
            new_seat.customer = None
            new_seat.movie = self
            new_seat.row = i%10 + 1
            new_seat.number = i + 1
            new_seat.save()


    def getSeatsList(self):
        return list(self.movie_seats.all())

И ваша модель сиденья:

class Seat(models.Model):
    customer = models.ForeignKey(User, on_delete=models.CASCADE, default=None, null=True, blank=True)

    # Adding a Foreign Key with a related name
    movie = models.ForeignKey(Movies, on_delete=models.CASCADE, related_name='movie_seats', null=True, blank=True)
    row = models.CharField(max_length=1)
    number = models.IntegerField()   

Или же, в вашем views.py или в любом другом месте, когда вы создаете новый Mov ie, вы можете создать список мест и назначить их вашему mov ie:

new_movie = Movies()
new_movie.title = "New Title"
new_movie.price = 20
new_movie.max_seats = 100
new_movie.save()

for i in range(new_movie.max_seats):
    new_seat = Seat()
    new_seat.customer = None
    new_seat.movie = new_movie
    new_seat.row = i%10 + 1
    new_seat.number = i + 1
    new_seat.save()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...