将生成的 csv 文件分配给 Django 模型
assign resulting csv file to django model
我正在开发一个包含不同歌曲的网站。这些歌曲包含不同的属性,其中一个是我通过 django 的 fileField 字段上传的 midi 文件。当我使用表单添加具有这些属性的歌曲时,我调用一个脚本生成一个带有 midi 属性信息的 csv 文件。
问题是我想将这个生成的 csv 文件直接分配给另一个文件字段,即当我创建表单时,这个 csv 被分配给一个文件字段,就在提交表单之后。
我想知道是否有人可以帮我解决这个问题。如果您需要任何代码或其他东西,请告诉我。
这是我在 forms.py 的代码。使用此表单,我添加了一首具有以下属性的新歌曲。
class FormCancion(forms.ModelForm):
class Meta:
model = Cancion
fields= ['titulo','creacion','midi','dificultad','nota_pad_verde','nota_pad_gris','nota_pad_azul','nota_pad_amarillo','nota_pad_rojo']
views.py 代码。此视图用于调用添加新歌的窗体。
def crearCancion(request):
cancion=Cancion()
if request.method=="POST":
formulario=FormCancion(request.POST,request.FILES,instance=cancion)
if formulario.is_valid():
formulario.save()
subprocess.call(['python', '/home/josema/MEGA/Universidad/Universidad/PROYECTO/MIDIPIRCUSSION/MIDIPIRCUSSION_APP/static/MIDIPIRCUSSION_APP/parser.py', '/home/josema/MEGA/Universidad/Universidad/PROYECTO/MIDIPIRCUSSION/media/'+str(cancion.midi)])
return redirect('/ListadoCanciones/')
else:
formulario=FormCancion()
context={'formulario':formulario}
return render(request,"nuevaCancion.html",context)
我的 models.py 代码。我需要添加的唯一模型字段是 csv 文件。我想在提交表单后自动添加。
class Cancion(models.Model):
titulo=models.CharField(max_length=60)
creacion=models.DateField(default=timezone.now)
avanzado="Avanzado"
intermedio="Intermedio"
principiante="Principiante"
dificultades=((avanzado, 'Avanzado'), (intermedio, 'Intermedio'), (principiante, 'Principiante'))
dificultad=models.CharField(max_length=15, choices=dificultades)
@property
def filename(self):
return self.midi.path
midi = models.FileField()
@property
def filename(self):
return self.csv.path
csv = models.FileField()
假设您有这样的模型,
class SampleModel(models.Model):
doc = models.FileField(upload_to='media/', null=True, blank=True)
然后做这样的事情将文件添加到模型,
from django.core.files import File
myfile = open("sample.csv", 'r')
sample = SampleModel.objects.create(doc=File(myfile))
更新
from django.core.files import File
myfile = open("sample.csv", 'r')
sample = <b>Cancion</b>.objects.create(csv=File(myfile))
我正在开发一个包含不同歌曲的网站。这些歌曲包含不同的属性,其中一个是我通过 django 的 fileField 字段上传的 midi 文件。当我使用表单添加具有这些属性的歌曲时,我调用一个脚本生成一个带有 midi 属性信息的 csv 文件。
问题是我想将这个生成的 csv 文件直接分配给另一个文件字段,即当我创建表单时,这个 csv 被分配给一个文件字段,就在提交表单之后。
我想知道是否有人可以帮我解决这个问题。如果您需要任何代码或其他东西,请告诉我。
这是我在 forms.py 的代码。使用此表单,我添加了一首具有以下属性的新歌曲。
class FormCancion(forms.ModelForm):
class Meta:
model = Cancion
fields= ['titulo','creacion','midi','dificultad','nota_pad_verde','nota_pad_gris','nota_pad_azul','nota_pad_amarillo','nota_pad_rojo']
views.py 代码。此视图用于调用添加新歌的窗体。
def crearCancion(request):
cancion=Cancion()
if request.method=="POST":
formulario=FormCancion(request.POST,request.FILES,instance=cancion)
if formulario.is_valid():
formulario.save()
subprocess.call(['python', '/home/josema/MEGA/Universidad/Universidad/PROYECTO/MIDIPIRCUSSION/MIDIPIRCUSSION_APP/static/MIDIPIRCUSSION_APP/parser.py', '/home/josema/MEGA/Universidad/Universidad/PROYECTO/MIDIPIRCUSSION/media/'+str(cancion.midi)])
return redirect('/ListadoCanciones/')
else:
formulario=FormCancion()
context={'formulario':formulario}
return render(request,"nuevaCancion.html",context)
我的 models.py 代码。我需要添加的唯一模型字段是 csv 文件。我想在提交表单后自动添加。
class Cancion(models.Model):
titulo=models.CharField(max_length=60)
creacion=models.DateField(default=timezone.now)
avanzado="Avanzado"
intermedio="Intermedio"
principiante="Principiante"
dificultades=((avanzado, 'Avanzado'), (intermedio, 'Intermedio'), (principiante, 'Principiante'))
dificultad=models.CharField(max_length=15, choices=dificultades)
@property
def filename(self):
return self.midi.path
midi = models.FileField()
@property
def filename(self):
return self.csv.path
csv = models.FileField()
假设您有这样的模型,
class SampleModel(models.Model):
doc = models.FileField(upload_to='media/', null=True, blank=True)
然后做这样的事情将文件添加到模型,
from django.core.files import File
myfile = open("sample.csv", 'r')
sample = SampleModel.objects.create(doc=File(myfile))
更新
from django.core.files import File
myfile = open("sample.csv", 'r')
sample = <b>Cancion</b>.objects.create(csv=File(myfile))