django错误:NOT NULL约束失败

时间:2017-07-11 15:31:45

标签: django django-models django-forms django-views

我在尝试制作两个表单(有两个模型)并在视图中处理时遇到此错误。我的SongForm没有将数据保存在数据库中,而AlbumForm完全保存了它的数据。

views.py -

def formm(request):
if request.method=='POST':
    songform = SongForm(request.POST)
    albumform=AlbumForm(request.POST)
    if songform.is_valid() and albumform.is_valid():
        songform.save()
        albumform=albumform.save(commit=False)
        albumform.date=timezone.now()
        albumform.save()
        return redirect("result")

forms.py -

from django import forms
from . models import Album,Song

class SongForm(forms.ModelForm):
    class Meta:
        model=Song
        fields=('song_title','genre')

class AlbumForm(forms.ModelForm):
    class Meta:
        model=Album
        fields=('album_title',)

models.py -

from __future__ import unicode_literals
from django.db import models

class Album(models.Model):
    album_title=models.CharField(max_length=50)
    date=models.DateTimeField(blank=True,null=True)

def __str__(self):
    return self.album_title

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

    def __str__(self):
       return self.song_title

formmpage.html -

    {% extends "musicapp/basepage.html" %}

{% block content %}

<form method="POST" class="post-form">
    {% csrf_token %}
    {{ songform.as_p }}
        {{ albumform.as_p }}


    <button type="submit" class="btn btn-info">POST</button>
</form>


{% endblock %}

请纠正我,实际上我做错了。我想这是在我的views.py。

2 个答案:

答案 0 :(得分:2)

在保存之前,您似乎应该设置歌曲的专辑。

authorize_resource

请注意,我将代码更改为if songform.is_valid() and albumform.is_valid(): album = albumform.save(commit=False) album.date = timezone.now() album.save() song = songform.save(commit=False) song.album = album song.save() return redirect("result") ,因为album=albumform.save(commit=False)方法返回的是模型实例,而不是表单实例。

答案 1 :(得分:1)

好的,我确定这是问题,但我已经使用了您给我的代码,并且由于您的Song模型具有相册模型的外键,我得到完整性错误如果没有null=True,它就不会允许您创建没有相册模型的新歌曲。

必须有某种商业逻辑才能知道某首歌是否属于专辑。在我看来,你应该在不同的端点中拥有这两个。

创建歌曲时,您应该能够根据流派选择可能属于或不属于的列表专辑。

无论如何,只需在歌曲模型中的专辑外键属性上添加null=True即可完成此操作。