Django bulk_create не устанавливает поле с вариантами выбора
В моем файле model.py у меня есть базовый и премиум купон, как показано ниже.
coupon_types = (
("Basic", "basic"),
("Premium", "premium"),
)
class Coupon(Stamp):
...
type = models.CharField(choices=coupon_types, max_length=256, default=coupon_types[0], null=True, blank=True)
В приведенном ниже коде я пытаюсь создать объекты купонов в базе данных
class ClassName:
...
# Some attributes and methods
...
def __construct_initiator_object(self, **kwargs):
objs = [
self.initiator(
...
...
type=coupon_types[0] if self.coupon_type.lower() == 'basic' else coupon_types[1]
)
for code in self.coupons
]
return objs
@transaction.atomic
def __create__(self):
objs = self.__construct_initiator_object()
create_objs = Coupon.objects.bulk_create(objs)
return create_objs
Теперь моя проблема заключается в том, что всякий раз, когда я вызываю метод create, bulk_create устанавливает все остальные поля, но не поле type. Я не знаю, может это потому, что у меня есть choices=coupon_types в поле type.
Помогите, пожалуйста, как это преодолеть.
Я думаю, сначала вам нужно изменить ваш выбор на что-то вроде:
class Coupon:
BASIC = "Basic"
PREMIUM = "Premium"
coupon_types = (
(BASIC, "basic"),
(PREMIUM, "premium"),
)
...
type = models.CharField(choices=coupon_types, max_length=256, default=BASIC)
Также обратите внимание, что я удалил null и blank из этого поля, потому что вы предоставили значение по умолчанию для этого поля и они вам не нужны. Пожалуйста, убедитесь, что ваша база данных обновлена, выполнив команды makemigrations и migrate.
и затем измените __construct_initiator_object на
def __construct_initiator_object(self, **kwargs):
objs = [
self.initiator(
...
...
type=Coupon.BASIC if self.coupon_type.lower() == 'basic' else Coupon.PREMIUM
)
for code in self.coupons
]
return objs
Поскольку я не смог найти ваш метод initiator, пожалуйста, убедитесь, что вы добавляете все (т.е. тип) к объектам в этом методе. Надеюсь, это решит вашу проблему.