Как создать несколько объектов модели в Django

#python #django #django-rest-framework

#python #django #django-rest-framework

Вопрос:

У меня есть модель под названием coupon с внешней реализацией для модели курса. Мне нужно создать несколько купонов с помощью модели купона. Допустим, если количество равно 50, то оно должно сохранить 50 купонов в базе данных. Могу ли я добиться этого с помощью метода bulk_create() и как это сделать. Также я использую Django Rest Framework

 class Coupon(models.Model):
    course = models.ForeignKey(Course, on_delete=models.CASCADE, null=True)
    expire_date = models.DateTimeField(verbose_name="expire_date", default=now())
  

Спасибо!

Ответ №1:

Да, вы можете использовать .bulk_create(…) [Django-doc] , хотя сначала вы должны исправить default=… параметр для expre_date . Если вы установите это как default=now() , это займет expire_date время, когда класс был интерпретирован, так что это очень близко к моменту запуска сервера. Вероятно, вы хотите установить для этого дату и время, когда coupon был создан:

 class Coupon(models.Model):
    course = models.ForeignKey(Course, on_delete=models.CASCADE, null=True)
    expire_date = models.DateTimeField(verbose_name='expire_date', default=now)  

Вы можете создать несколько записей для данного Course с заданной датой истечения срока действия с помощью:

 from datetime import datetime

course = None  # … ← the course for which the coupons are used
expire_date = datetime(2021, 11, 7)  # ← when will the coupons expire
n = 50  # ← number of coupons to create

Coupon.objects.bulk_create(
    [
        Coupon(course=course, expire_date=expire_date)
        for __ in range(n)
    ]
)  

Таким образом, мы сделаем один запрос к базе данных, чтобы вставить все 50 купонов.