2016-10-20 1 views
0

J'utilise xlsxwriter pour exporter le contenu de ma base de données de Django admin vers un fichier Excel. Les en-têtes dans le fichier Excel sont censés être les noms de mes champs de modèle, suivis des lignes de données de ma base de données. J'ai réussi à faire fonctionner le processus d'exportation, mais lorsque j'ouvre le fichier Excel téléchargé, toutes les colonnes/données de ma base de données apparaissent dans un ordre apparemment aléatoire. Ils n'apparaissent pas dans le même ordre que les champs vu dans l'admin Django. Dans Django admin info permet d'afficher dans le bon ordre d'une table,Pourquoi xlsxwriter exporte-t-il les données de ma base de données depuis l'administrateur Django vers Excel dans le mauvais ordre?

Colonne A Colonne B - - Colonne C - Colonne D - Colonne E - etc.

alors que dans mon fichier Excel exporté je vois tout escalada,

Colonne B - Colonne E - Colonne A - Colonne D - Colonne C - etc.

Voici mon code. Je ne comprends pas pourquoi il n'exporterait pas les noms et les données des colonnes dans le bon ordre. Toute aide appréciée!

def dump_attorneys_to_xlsx(request): 
    if request.GET.get('export'): 
     output = BytesIO() 
     workbook = xlsxwriter.Workbook(output, {'in_memory': True}) 
     worksheet = workbook.add_worksheet('Summary') 

     attorneys = Attorney.objects.all().values() 
     # Write header 
     worksheet.write_row(0, 0, attorneys[0].keys()) 
     # Write data 
     for row_index, row_dict in enumerate(attorneys, start=1): 
      worksheet.write_row(row_index, 0, row_dict.values()) 
     workbook.close() 

     output.seek(0) 

     response = HttpResponse(output.read(), content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') 
     response['Content-Disposition'] = 'attachment; filename=summary.xlsx' 

     return response 
    else: 
     return render("change_list.html", 
         context_instance=RequestContext(request), 
         template_name='change_list.html') 

Répondre

0

values() renvoie les lignes sous la forme d'une liste de dictionnaires. Les dictionnaires Python ne sont pas ordonnés.

+0

Ahhh, ça l'explique! Existe-t-il un moyen de trier les dictionnaires afin qu'ils correspondent à l'ordre des champs du modèle Django? –