Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 保存对象时,“MyModel”对象不可编辑(Django)_Python_Django - Fatal编程技术网

Python 保存对象时,“MyModel”对象不可编辑(Django)

Python 保存对象时,“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

当我试图编辑这个对象时,我得到了上面的错误。 如果使用表单中所需的值创建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 == '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请求设置初始值,所以我已经删除了它