Python 保存对象时,“MyModel”对象不可编辑(Django)
当我试图编辑这个对象时,我得到了上面的错误。 如果使用表单中所需的值创建dict,它只会保存一个新对象,而不会覆盖当前对象 views.pyPython 保存对象时,“MyModel”对象不可编辑(Django),python,django,Python,Django,当我试图编辑这个对象时,我得到了上面的错误。 如果使用表单中所需的值创建dict,它只会保存一个新对象,而不会覆盖当前对象 views.py @login_required def edit_song(request, song_id): song = get_object_or_404(Song, pk=song_id) form = SongForm(instance=Song.objects.get(id=song_id)) if request.method
@login_required
def edit_song(request, song_id):
song = get_object_or_404(Song, pk=song_id)
form = SongForm(instance=Song.objects.get(id=song_id))
if request.method == 'POST':
form = SongForm(data=request.POST, initial=song)
if form.is_valid():
obj = form.save()
obj.save()
return HttpResponseRedirect('/music-manager/song/' + str(obj.pk))
forms.py
class SongForm(forms.ModelForm):
class Meta:
model = Song
fields = ['title', 'lyrics', 'notes', 'key', 'chords', 'video', 'audio']
def __init__(self, *args, **kwargs):
super(SongForm, self).__init__(*args, **kwargs)
for visible in self.visible_fields():
visible.field.widget.attrs['class'] = 'form-control'
尝试:
尝试:
您应该为POST请求和GET请求设置实例
song = get_object_or_404(Song, pk=song_id)
form = SongForm(instance=song)
if request.method == 'POST':
form = SongForm(data=request.POST, instance=song)
if form.is_valid():
...
您不需要为POST请求设置初始值,所以我已经删除了它。您应该为POST请求和GET请求设置实例
song = get_object_or_404(Song, pk=song_id)
form = SongForm(instance=song)
if request.method == 'POST':
form = SongForm(data=request.POST, instance=song)
if form.is_valid():
...
您不需要为POST请求设置初始值,所以我已经删除了它