#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 купонов.