Я пытаюсь создать объект 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
, но об этом не может быть и до стабильной версии.