我正在学习django,我正在创建一个简单的音乐库,它有2个基本模型Song
和Singer
现在歌手与Song有many-to-many
的关系
Modles.py
class Singer(models.Model):
name = models.CharField('Singer', max_length=255)
class Song(models.Model):
title = models.CharField(max_length=255)
lyrics = models.TextField()
singer = models.ManyToManyField(Singer)
现在在我的管理部分我修改了歌手(多选)字段以使用Select2 Jquery插件,我为此插件添加了标记支持使用以下代码:
$(".js-example-tags").select2({
tags: true
})
所以我可以在添加歌曲的同时输入和添加任何新歌手的名字(谁还没有出席),因为我不希望单独的UI添加歌手名称。
现在我不知道如何继续将这个新歌手的名字添加到歌手表中,然后将他与django-admin中的特定歌曲联系起来。
当我提交包含任何新歌手姓名的表格时,我会收到验证错误。我搜索了很多,但似乎无法找到任何解决方案。
更新
我尝试从管理面板中的添加歌曲页面添加一首新歌曲。在歌手字段中,我指定了“Some Singer”(我的数据库中没有此歌手)。在提交表单时,我收到错误:
“Some SInger”不是主键的有效值。
forms.py
class SongForm(forms.ModelForm):
class Meta:
model = Song
fields = ['title', 'lyrics', 'image', 'singer', 'pub_date']
widgets = {
'singer': forms.SelectMultiple(attrs={'class': 'multipleSelectBox'}),
}
admin.py
class SongAdmin(admin.ModelAdmin):
class Media:
def __init__(self):
pass
css = {
"all": ('css/plugins/select2.min.css', )
}
js = (
'http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js',
'js/plugins/select2.min.js',
'js/songs.js'
)
form = SongForm
admin.site.register(Song, SongAdmin)