मैं Inquiry
वस्तुओं की एक बड़ी (300+ एक समय) सूची के लिए Activty
ऑब्जेक्ट बनाने की कोशिश कर रहा हूं। मेरे पास एक 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
, लेकिन यह सवाल से बाहर है जब तक वहाँ एक स्थिर रिलीज है।
एक अच्छा विचार की तरह लगता है, लेकिन प्रदर्शन में बहुत बदलाव नहीं आया। 5-10 गतिविधियों पर, इसमें लगभग 5% की गति वृद्धि हुई थी। 100 पर, 10% की गति कम हो जाती है। –
सूचक के लिए धन्यवाद। यह एक महान नई सुविधा है। – AgDude