python - 从 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)
解决方案
我认为您在模型内向硬编码选择添加选择的方法是不正确的。我认为你可以这样处理:
首先,将 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
。希望能帮助到你。
推荐阅读
- spring-mvc - Spring Integration - Dispatcher 没有订阅者
- javascript - 直接使用 JS 源映射?
- go - 使用原始文件的共享外部包?
- java - 包装 byte[] 的 ImageInputStreamImpl 实现
- ios - 用 Objective-C 中 MKAnnotation 中的 customButton 替换 rightCalloutAccessoryView 中的 detailDisclosureButton
- sql - SQL 日期和时间格式
- c# - C# 多级指针最后一次计算错误
- json - 在 Visual Studio Code 中排除 json 类型文件的 git 版本控制
- amazon-web-services - 在 AWS 的安全策略中删除/(更改 IP 地址)后保持连接
- r - 我可以使用 devtools::install_github() 增加超时长度吗