Я хочу получить большие данные (например, 5 000 000) с таблицами данных в Django. Но обработка идет медленно (загрузка страницы составляет 12 секунд). Пользователи заходят на веб-страницу. Затем нажмите, чтобы проверить .html. Внутренний процесс запускается до test_json в представлениях. Представления вызывают вызов данных из БД с помощью to_dict_json. На Models.py. Этот метод в Views возвращает объекты ответа Json.
Как ускорить работу с большими данными в Django с помощью таблиц данных
Models.py
class SysTest(models.Model):
class Meta:
db_table = 'sysTest'
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
Tip = models.ForeignKey(SysRefTip, on_delete=models.CASCADE)
Kod = models.CharField(_("Kod"), max_length=20, blank=False, null=False)
Aciklama1 = models.CharField(_("Açıklama 1"), max_length=100,blank=True, null=True)
Aciklama2 = models.CharField(_("Açıklama 2"), max_length=100,blank=True, null=True)
GrupKod = models.CharField(_("Grup Kodu"), max_length=20,blank=True, null=True)
SayKod = models.FloatField(_("Sayısal Değer"),blank=True, null=True)
def to_dict_json(self):
return{
'Id':self.id,
'Kod':self.Kod,
'Aciklama1':self.Aciklama1,
'Aciklama2':self.Aciklama2,
'GrupKod':self.GrupKod,
'SayKod':self.SayKod,
}
View.py
def test_json(request):
persons = SysTest.objects.all()
data = [person.to_dict_json() for person in persons ]
response = {'data': data}
return JsonResponse(response,safe=False,content_type="application/json")
Urls.py
from django.urls import path, include
from Referans.Views import testView
from django.conf.urls.i18n import i18n_patterns
app_name ="Test"
urlpatterns = [
path('', testView.test_listele , name="test"),
path('test/json/', testView.test_json, name='test_json'),
]
test.html
<div class="card-body">
<table id="myTable2" class="table datatable-responsive-control-right">
<thead>
<tr>
<th>Id</th>
<th>Kod</th>
<th>Açıklama1</th>
<th>Açıklama2</th>
<th>SayKod</th>
<th>GrupKod</th>
</tr>
</thead>
</table>
</div>
{% block js%}
<script>
$(document).ready( function () {
var t0 = performance.now();
degerleriGetir('test/json')
var t1 = performance.now();
});
function degerleriGetir(data){
table =$('#myTable2').DataTable({
Serverside:true,
Processing: true,
orderClasses: false,
bSortClasses:false,
bDeferRender: true,
scrollCollapse: true,
scrollY: 500,
stateSave: true,
scroller: {
loadingIndicator: true
},
ajax:{
url:('test/json'),
processing:true,
},
destroy:true,
columns: [
{'data': 'Id'},
{'data': 'Kod'},
{'data': 'Aciklama1'},
{'data': 'Aciklama2'},
{'data': 'GrupKod'},
{'data': 'SayKod'}
]
});
};
</script>
{% endblock js %}