Ai fini dell'apprendimento, sto creando una webapp che crea grafici con matplotlib e voglio salvare l'immagine di quella trama nel campo figure
del modello Plot ma quando faccio un complotto tutto salva un'immagine vuota nella directory /media/figures/
. Ho fatto questo come suggerito da un altro post, ma non funziona.Salva l'immagine di trama Matplotlib nel modello Django
Ulteriori informazioni Quando faccio la trama, l'immagine plot viene salvato nella directory principale del mio progetto Django con un nome come <_io.StringIO object at 0xb1ac69ec>
, ma come ho detto l'immagine trama che viene salvato nel modello è vuota. Inoltre sto usando Python 2.7 se questo è importante.
def simple_plot(request):
if request.method == "POST":
name = request.POST.get("name")
xvalues = request.POST.get("xvalues")
yvalues = request.POST.get("yvalues")
plots.simple_plot(request, name, xvalues, yvalues)
messages.success(request, "Plot created!")
redirect("plots:create")
return render(request, 'plots/simple.html')
Il file di cui sono costituiti i grafici e le istanze di stampa create.
def simple_plot(request ,name, xvalues, yvalues):
file_name = name+".png"
xvalues = [int(x.replace(" ","")) for x in xvalues.split(",")]
yvalues = [int(y.replace(" ","")) for y in yvalues.split(",")]
figure = io.StringIO()
plot = plt.plot(xvalues, yvalues)
plt.savefig(u'%s' % figure, format="png")
content_file = ContentFile(figure.getvalue())
plot_instance = Plot(name=name, user=request.user)
plot_instance.figure.save(file_name, content_file)
plot_instance.save()
return True
Trama Modello
class Plot(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
name = models.CharField(max_length=200)
figure = models.ImageField(upload_to='figures/')
timestamp = models.DateTimeField(auto_now_add=True)
Potresti postare il modello di Plot? Cosa fa ContentFile? – Jonathan
Ho aggiunto il modello Plot, ContentFile/https://docs.djangoproject.com/en/1.9/ref/files/file/#the-contentfile-class – eustass