Python 带有CreateView的Django IntegrityError

Python 带有CreateView的Django IntegrityError,python,django,Python,Django,我正在尝试向网站添加一个功能,以添加新歌曲信息。用户填写song_form.html并尝试提交新歌后,返回IntegrityError,问题就会出现。它说NOTNULL约束失败:music\u song.album\u id。任何帮助都将不胜感激。谢谢 #models.py class Album(models.Model): album_title = models.CharField(max_length=500) artist = models.CharField(max_

我正在尝试向网站添加一个功能,以添加新歌曲信息。用户填写song_form.html并尝试提交新歌后,返回IntegrityError,问题就会出现。它说NOTNULL约束失败:music\u song.album\u id。任何帮助都将不胜感激。谢谢

#models.py
class Album(models.Model):
    album_title = models.CharField(max_length=500)
    artist = models.CharField(max_length=250)
    genre = models.CharField(max_length=50)
    album_cover = models.FileField()

    def __str__(self):
        return self.album_title

    def get_absolute_url(self):
        return reverse('music:detail', kwargs={'pk': self.pk})


class Song(models.Model):
    album = models.ForeignKey(Album, on_delete=models.CASCADE)
    song_title = models.CharField(max_length=250)
    file_type = models.CharField(max_length=50)

    def __str__(self):
        return self.song_title

#views.py
class CreateSong(generic.CreateView):
    model = Song
    fields = ['song_title', 'file_type']

你的意思是需要这张专辑吗?如果是这样,则需要将其作为字段添加到歌曲表单中,但如果不是这样,则需要将外键约束声明为可空,如下所示:

album = models.ForeignKey(Album, on_delete=models.CASCADE, blank=True, null=True)

(请记住为应用程序进行迁移,然后在更改后进行迁移)

album
是您的模型上的必填字段,但您已将其从
CreateSong
表单中的字段中排除,因此出现了错误。这为什么会让您感到惊讶?您指定歌曲需要相册,但CreateSong仅包含歌曲标题和文件类型字段。我不希望用户填写相册字段。相册字段需要自动定义为album.id,但我不确定如何定义。谢谢。设置null=True确实解决了IntegrityError问题,因此该字段不是必需的。很高兴听到这个消息。如果你觉得这就是你想要的,你可以把它标记为答案,以备将来参考。