在 DJANGO 中更新模型数据时,数据未预先填充在表单中

时间:2021-04-26 11:41:01

标签: django django-views

我不确定出了什么问题但是来自用户的数据没有预先填充到表单中,即使在遵循 django 文档之后,我也只得到一个空表单,在 url 中我有正确的 id对于该项目,我有文本和 2 个“文件字段”,我需要将它们请求到更新表单中,并希望用户能够更新一个或多个字段,感谢帮助?

这是我的观点和更新表单 html

观看次数

@login_required 
def music_upload(request, slug):
    if request.method == "POST":
        form = MusicForm(request.POST, request.FILES)
        if form.is_valid():
            song = form.save(commit=False)
            song.artist = request.user
            song.track = request.FILES['track']
            file_type = song.track.url.split('.')[-1]
            file_type = file_type.lower()
            if file_type not in MUSIC_FILE_TYPES:
                messages.error(request, f'ERROR - Track needs to be in MP3 format, Please try again!')
                return render(request, 'feed/music_upload.html', {'form':form})
            else:
                song.save()
                messages.success(request, f'Track Uploaded')
                return redirect('my_profile', slug=slug)
    else:
        form = MusicForm()
    return render(request, 'feed/music_upload.html', {'form':form})


@login_required
def edit_song(request, pk):
    artist = request.user.profile.user_id
    track = Music.objects.get(pk=pk).artist
    if request.method == 'POST':
            m_form = MusicUpdateForm(request.POST, request.FILES, instance=track)
            if m_form.is_valid():
                    m_form.save()
                    messages.info(request, f'Your track has been updated!')
                    return redirect('edit_track')
            
    else:
            m_form = MusicUpdateForm(instance=track)
    context ={
            'm_form': m_form,
            'track': track,
            'artist': artist,
    }
    return render(request, 'feed/music_update.html', context)

更新.html

<div class="container">
    <div class="row">
      <div class="col-sm-12 col-md-9 col-lg-9 mx-auto">
        <div class="card card-signin my-5">
          <div class="card-body">
            <h5 class="card-title text-center"><b>Upload Music</b></h5>
            <form class="form-signin" method = "POST" enctype="multipart/form-data">
            {% csrf_token %}
            <fieldset class="form-group"><br>
                {{ m_form|crispy }}
            </fieldset>
            <div class="form-group">
                <button class="btn btn-info btn-primary btn-block text-uppercase post_button" type="submit">Update</button><br>

1 个答案:

答案 0 :(得分:0)

您没有正确传递轨道实例

 track = Music.objects.get(pk=pk)
    if request.method == 'POST':
      m_form = MusicUpdateForm(request.POST, request.FILES, instance=track)