Öğrenme amaçlarım için matplotlib ile çizim yapan bir webapp yapıyorum ve bu arsa görüntüsünü Plot modelinin figure
alanına kaydetmek istiyorum ama ben bir komplo oluşturduğumda boş bir görüntüyü /media/figures/
dizinine kaydeder. Bunu başka bir gönderide önerdim ama işe yaramadı.Matplotlib arsa görüntüsünü Django modeline kaydetme
Ben komplo yaparken Bilgi Daha, arsa görüntü <_io.StringIO object at 0xb1ac69ec>
gibi bir isim ile benim django Projenin ana dizine kaydedilir, fakat dediğim gibi modelde kaydedilmez arsa görüntü boştur alır. Ayrıca, önemliyse Python 2.7'u kullanıyorum.
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')
Oluşturulan dosya oluşturuldu ve çizim örnekleri oluşturuldu.
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
Plot Modeli
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)
Plot modelinin neye benzediğini kaydedebilir misiniz? ContentFile ne yapar? – Jonathan
Plot modelini ekledim, ContentFile/https://docs.djangoproject.com/en/1.9/ref/files/file/#the-contentfile-class – eustass