Есть ли более простой способ использовать bulk_create() со многими запросами для создания экземпляров элементов

#python #django

#python #django

Вопрос:

Я вообще не знаю базового программирования и только что изучил python и Django несколько месяцев назад, из-за острой необходимости я решил создать свою собственную программу для поддержки моего отдела и команды после запуска программы, я хочу упростить ее для пользователя, и после того, как я осмотрюсь, рекомендуетсячтобы использовать bulk_create и ajax JavaScript, определенно не используйте JavaScript. После поиска способов использования bulk_create я нахожу это неэффективным, например:

 instance = get_object_or_404(Audit, id=766)

item1 = get_object_or_404(Item.objects.filter(aspek=instance.aspek_audit).filter(active=True),id=1)
item2 = get_object_or_404(Item.objects.filter(aspek=instance.aspek_audit).filter(active=True),id=2)
item3 = get_object_or_404(Item.objects.filter(aspek=instance.aspek_audit).filter(active=True),id=3)
item4 = get_object_or_404(Item.objects.filter(aspek=instance.aspek_audit).filter(active=True),id=4)
item5 = get_object_or_404(Item.objects.filter(aspek=instance.aspek_audit).filter(active=True),id=5)
item6 = get_object_or_404(Item.objects.filter(aspek=instance.aspek_audit).filter(active=True),id=6)
item7 = get_object_or_404(Item.objects.filter(aspek=instance.aspek_audit).filter(active=True),id=7)
item8 = get_object_or_404(Item.objects.filter(aspek=instance.aspek_audit).filter(active=True),id=8)
item9 = get_object_or_404(Item.objects.filter(aspek=instance.aspek_audit).filter(active=True),id=9)
item10 = get_object_or_404(Item.objects.filter(aspek=instance.aspek_audit).filter(active=True),id=10)
item11 = get_object_or_404(Item.objects.filter(aspek=instance.aspek_audit).filter(active=True),id=11)
item12 = get_object_or_404(Item.objects.filter(aspek=instance.aspek_audit).filter(active=True),id=12)

audit_mie = [

    AuditItem(audit=instance,item=item1,kategori=item1.kategori.kategori),
    AuditItem(audit=instance,item=item2,kategori=item2.kategori.kategori),
    AuditItem(audit=instance,item=item3,kategori=item3.kategori.kategori),
    AuditItem(audit=instance,item=item4,kategori=item4.kategori.kategori),
    AuditItem(audit=instance,item=item5,kategori=item5.kategori.kategori),
    AuditItem(audit=instance,item=item6,kategori=item6.kategori.kategori),
    AuditItem(audit=instance,item=item7,kategori=item7.kategori.kategori),
    AuditItem(audit=instance,item=item8,kategori=item8.kategori.kategori),
    AuditItem(audit=instance,item=item9,kategori=item9.kategori.kategori),
    AuditItem(audit=instance,item=item10,kategori=item10.kategori.kategori),
    AuditItem(audit=instance,item=item11,kategori=item11.kategori.kategori),
    AuditItem(audit=instance,item=item12,kategori=item12.kategori.kategori),
]

AuditItem.objects.bulk_create(audit_mie)
  

есть ли более простой способ, помимо описанного выше метода?

если нет, то я придерживаюсь этого, создавая объекты в каждом идентификаторе элемента, который составляет примерно 130 (в настоящее время), и я сгруппирую его в 8 (в настоящее время) метод bulk_create() .

Ответ №1:

Вы могли бы использовать список для хранения всех ваших элементов и цикл for для перебора их.

 items = []
audit_mie = []
instance = get_object_or_404(Audit, id=766)

#the range is the starting and ending range, it will count from 1 to 12
for i in range(1,13)
    tmp = (get_object_or_404(Item.objects.filter(aspek=instance.aspek_audit).filter(active=True),id=i))
    items.append(tmp)
    audit_mie.append(AuditItem(audit=instance,item=tmp,kategori=tmp.kategori.kategori))

AuditItem.objects.bulk_create(audit_mie)
  

Цикл for, повторяющийся по списку, позволит вам перейти к определенному элементу, если это необходимо, используя items[1] или любой другой элемент, к которому вы конкретно хотите получить доступ, если это необходимо.
Этот ресурс должен помочь вам понять списки, если это необходимо, и это должно помочь с циклами for .

Комментарии:

1. моя ошибка как новичка заключается в том, что я плохо изучаю основы python и, как правило, быстро заканчиваю, как это часто используется, а именно «instance» lol кстати, после того, как я попробовал это, напрямую используя его с URL, он обязательно повторит функцию. и, наконец, я превратил его в кнопку ajax, и это сработало! просто, когда я нажимаю 1x, все по-прежнему нормально, он отлично отображается, получается, что второй щелчок добавляет новый список под ним, я могу просто нажать кнопку или выдать предупреждение «просто нажмите один раз» lol еще раз, я вам очень благодарен