我在尝试制作两个表单(有两个模型)并在视图中处理时遇到此错误。我的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。
答案 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
即可完成此操作。