首页 > 解决方案 > 从 django 中的文件添加选项

问题描述

我正在完成我的最后一个项目,我需要你的帮助!

我需要从文件中提取一些数据并将它们添加为 django 表单中的选项。这些是 MIDI 音符。我需要浏览包含音符的文件(我创建的一个 csv),提取它们并将它们转换为我的表单的选项,所以我只能选择存在的那些,因为每首歌曲都有不同的音符。有人可以给我一些关于如何做到这一点的想法吗?如果您有任何疑问,或者如果您需要更多信息,请随时提问!

编辑:我正在添加我已经完成的内容。在我的 models.py 中,我创建了 NOTAS_CHOICES,所以我想将这个选项添加到其中。通过打印,我显示 NOTAS_CHOICES 给出的内容,它给出了所有值,但它们没有以应有的形式显示

def Modificacion_Bateria(request, cancion_id):
cancion=Cancion.objects.get(pk=cancion_id)
    cancion.NOTAS_CHOICES=(('0','Nota Pad Verde'),('1','Nota Pad Gris'),('2','Nota Pad Azul'),('3', 'Nota Pad Amarillo'),
    ('4','Nota Pad Rojo'),('35','Acoustic Bass Drum'),('36','Bass Drum 1'),('37','Side Stick'),('38','Acoustic Snare'),('39','Hand Clap'),
    ('40','Electric Snare'),('41','Low Floor Tom'),('42','Closed Hi Hat'),('43','High Floor Tom'),('44','Pedal Hi-Hat'),
    ('45','Low Tom'),('46','Open Hi-Hat'),('47','Low-Mid Tom'),('48','Hi-Mid Tom'),('49','Crash Cymbal 1'),('50','High Tom'),
    ('51','Ride Cymbal 1'),('52','Chinese Cymbal'),('53','Ride Bell'),('54','Tambourine'),('55','Splash Cymbal'),
    ('56','Cowbell'),('57','Crash Cymbal 2'),('58','Vibraslap'),('59','Ride Cymbal 2'),('60','Hi Bongo'),('61','Low Bongo'),
    ('62','Mute Hi Conga'),('63','Open Hi Conga'),('64','Low Conga'),('65','High Timbale'),('66','Low Timbale'),('67','High Agogo'),
    ('68','Low Agogo'),('69','Cabasa'),('70','Maracas'),('71','Short Whistle'),('72','Long Whistle'),('73','Short Guiro'),
    ('74','Long Guiro'),('75','Claves'),('76','Hi Wood Block'),('77','Low Wood Block'),('78','Mute Cuica'),('79','Open Cuica'),
    ('80','Mute Triangle'),('81','Open Triangle'))
    print cancion.NOTAS_CHOICES
if request.method=="POST":
    formulario_modifiacion_bateria=Formulario_Modificacion_Bateria(request.POST,request.FILES,instance=cancion)
    if formulario_modifiacion_bateria.is_valid():
        formulario_modifiacion_bateria.save()
        return redirect('/ListadoCanciones/')
else:
    formulario_modifiacion_bateria=Formulario_Modificacion_Bateria(instance=cancion)
context={'formulario_modifiacion_bateria':formulario_modifiacion_bateria, 'cancion':cancion}
return render(request,"configuracion.html",context)

在此处输入图像描述

标签: pythonhtmldjango

解决方案


我认为您在模型内向硬编码选择添加选择的方法是不正确的。我认为你可以这样处理:

首先,将 Note 声明为模型:

class Note(models.Model):
   text = models.TextField()

其次,它作为一个 FK 来Cancion建模:

class Cancion(models.Model):
   notes = models.ForeignKey(Note)
   ... # rest of the field

第三,我不确定这个表单的内容是什么Formulario_Modificacion_Bateria(命名类时请使用Pascal大小写),但是当它上传文件时,我假设它是notes文件。假设注释文件如下所示:

...
Nota Pad Verde,
Nota Pad Gris,
...

因此我们可以读取这些文件并在视图中的 Note 中创建条目。像这样:

def Modificacion_Bateria(request, cancion_id):  # Method should be snake case. Please read PEP-8 Style guide
    ...
    if request.method == "POST":
       ...
       data = csv.DictReader(request.FILES['file'])
       for row in data:
          note, created = Note.objects.get_or_create(text=row[0])

现在选择将在 ModelForm 关系中自动更新为Cancion。希望能帮助到你。


推荐阅读