在Django中向多对多字段添加内容

时间:2015-10-23 11:33:23

标签: python django django-models django-forms django-admin

我正在学习django,我正在创建一个简单的音乐库,它有2个基本模型SongSinger

现在歌手与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)

0 个答案:

没有答案