私は Inquiry
オブジェクトの大きな(300 +以上の)リストの Activty
オブジェクトを作成しようとしています。 1つの ModelForm
がポストバックされており、別のインスタンスを作成して GenericForeignKey
を介して Inquiry
にアタッチする必要があります。いくつかのコードに行きましょう:
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()
私が探しているのは、これらをデータベースに挿入する方法です。要求をより速く処理できるように、1回のパスで行うことが望ましいです。このアプリケーションは複数のデータベースベンダーに配備されているため、データベースレベルに落とさないことをお勧めしますが、これが唯一の方法であれば、そうしてください(MySQLとPostgresの例はすばらしいでしょう)。
Note: I know that there is a bulk_create
in the development version, but that is out of the question until there is a stable release.