Partage
  • Partager sur Facebook
  • Partager sur Twitter

Exporter un modele dans un tableur

Récupèrer un attribut d'un modèle référencé par une clé étrangère

    19 mai 2014 à 10:39:41

    [Python site web avec le framework Django, utilisation de la library xlwt]

    Bonjour,

    Je suis entrain de développer une fonction qui permet d'exporter un modèle dans un fichier export.

    Je veux écrire dans le fichier les informations d'une liste de contact (nom, description et nom de l'entreprise).

    Je n'arrive pas à écrire le nom de l'entreprise (clé étrangère dans le model Contact qui fais référence à un modèle entreprise).

    Que me conseillez - vous ?

    Pour comprendre voici les fichiers que j'utilisent (la vue et les modèles).

    la vue :

    def export_file(request):
    	"""
    	a function to test treatmentExportFile
    	"""
    	list_object = Contact.objects.all()#need to be modify
    	list_field = ['name', 'description', 'company']#need to be modify
    	file_name = "nom du fichier"
    	display_header = True
    	return treatmentExportFile(list_object, list_field, display_header)
    
    def treatmentExportFile(list_object, list_field, display_header=False, file_name="export"):
    	"""
    	Creates an xls with a list of object and a list of attributes given in parameter
    	"""
    	check_list = [attribut for attribut in list_field for object in list_object if not hasattr(object, attribut)]
    	check_list = list(set(check_list))
    	if len(check_list) !=0:
    		print "ERROR"
    		response = HttpResponse()
    		message = ""
    		for e in check_list:
    			message = message+e+", "
    		response.write("<p>- ERROR - Wrong parameter given <br/><br/> Field(s) indicated in list_field (<b>"+message+"</b>) do(es) not exist(s)) </p>")
    	else:
    		full_file_name = file_name + ".xls"
    		sheet_name = "sheet1"
    		style_header = xlwt.easyxf('font: bold 1')  
    		response = HttpResponse(content_type="application/ms-excel")
    		response['Content-Disposition'] = 'attachment; filename='+full_file_name
    		workbook = xlwt.Workbook()
    		sheet = workbook.add_sheet(sheet_name)
    		line=0
    		column=0
    		if display_header:
    			for i in range(0,len(list_field)):
    				sheet.write(line, column,list_field[i], style_header)
    				column += 1
    			line += 1
    			column=0
    		for elem in list_object:
    			dict = vars(elem)
    			print dict
    			for key in list_field:
    				if key in dict.keys():
    					sheet.write(line,column,dict[key])
    				column += 1
    			line += 1
    			column=0
    		workbook.save(response)
    		print "File created !"
    	return response

    le modèle :

    class Company(models.Model):
    	name = models.CharField(max_length=255, blank=True)
    
    	def __unicode__(self):
    		return u'%s' % (self.name)
    
    	class Meta:
    		ordering = [u'name']
    
    class Contact(models.Model):
    	name = models.CharField(max_length=255, blank=True)
    	description = models.CharField(max_length=255, blank=True)
    	company = models.ForeignKey(Company, blank=True, null=True)

    Que dois-je faire?

    Merci. Bonne journée.



     

    • Partager sur Facebook
    • Partager sur Twitter

    Exporter un modele dans un tableur

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown