Я пытаюсь создать объект Activty
для большого (300 + за раз) списка объектов Inquiry
. У меня есть один ModelForm
, который отправляется назад, и мне нужно создать отдельные экземпляры и прикрепить их к Inquiry
через GenericForeignKey
. Позвольте получить код:
models.py:
class InquiryEntry(models.Model):
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
entry = generic.GenericForeignKey('content_type', 'object_id')
class Inquiry(models.Model):
entries = models.ManyToManyField('InquiryEntry')
# And many more fields.
def add_entry(self, obj):
entry = self.entries.create(entry=obj)
self.save()
return entry
class Activity(models.Model):
ts = models.DateTimeField(auto_now_add=True)
due_date = models.DateField(auto_now=False)
## And many more fields.
views.py:
def bulk_create_activities(request):
activity_form = ActivityForm()
if request.method == "POST":
activity_form = ActivityForm(request.POST)
if activity_form.is_valid():
pks = [int(x) for x in request.POST.get('pks', '').split(',')]
for inquiry in Inquiry.objects.filter(pk__in=pks):
instance = ActivityForm(request.POST).save()
inquiry.add_entry(instance)
inquiry.save()
Я ищу способ вставить их в базу данных, желательно за один проход, чтобы запрос мог обрабатываться быстрее. Я предпочитаю не переходить на уровень базы данных, поскольку это приложение развертывается у нескольких поставщиков баз данных, но если это единственный способ продолжить работу, пусть будет так (примеры для MySQL и Postgres были бы замечательными).
Примечание. Я знаю, что в версии разработки есть bulk_create
, но это из вопрос до тех пор, пока не будет стабильного выпуска.