11

以下は、私のプロジェクトの django コードの簡略版です。ユーザーはファイルをアップロードしてタイトルを付けることができます。この機能は完全に機能します。ただし、ユーザーが後でフォームを再編集すると、ファイルとタイトルが再表示されますが、ユーザーがファイルを送信すると、ファイルは空になります。編集のために再度開いたフォームのファイル フィールドは、次のようになります。

現在: media_location/uploadedfile.mp3

変更: [ファイルを選択] ファイルが選択されていません

そして、私がそれを提出した後、それは次のとおりです。

  • このフィールドは必須です

[ファイルを選択] ファイルが選択されていません

ユーザーがファイルを再アップロードする必要がないようにするにはどうすればよいですか? 送信が完了するとフィールドが読み取り専用になるかどうか、または編集可能のままかどうかは問題ではありません。完成したプロジェクトはクライアント向けではなく、信頼できる少数のユーザー グループのみが利用できますが、可能であればベスト プラクティスに従いたいと考えています。助けてくれてありがとう。

ジャンゴコード:

models.py

class Recording(models.Model):
    rec_title=models.CharField(max_length=200,blank=True)
    rec_file = models.FileField(upload_to='recordings')

フォーム.py

from django import forms 
from songstorage.models import Recording
class RecordingForm(forms.ModelForm):
    rec_file=forms.FileField(label='Upload File')
    rec_title=forms.CharField(label='Recording Title',required=False)       
    class Meta:
        model=Recording

ビュー.py

def addrecordings(request,recordingfile):
    #if there is a recordingfile in the url, the user is editing...
    if recordingfile:
        recording=Recording.objects.get(rec_title=recordingfile)
        recording_form = RecordingForm(instance=recording)
    #...Otherwise a new form is createing a new one
    else:
        recording_form = RecordingForm(request.POST, request.FILES)

    #When the form is submitted, do the following:
    if request.method == 'POST': 
        #check if its valid
        if recording_form.is_valid():
            recording_form.save() 
            #if sucessfully submitted, redirect
            return redirect('/recordings/')
    return render_to_response('addrecordings.html',{'recording_form':recording_form},context_instance=RequestContext(request))
4

2 に答える 2

1

私は同じ問題を抱えており、有用なものを検索する方法も見つけることもできませんでした.私の現在の解決策は、シナリオで別のフォームを使用することです:

class RecordingUpdateForm(RecordingForm):
    rec_file=forms.FileField(label='Upload File', required=False)

唯一の違いは、UpdateView クラス ベースのビューを使用しているため、ビュー関数をRecordingUpdateForm更新に使用するように変更する必要があることです。

于 2015-06-01T00:34:00.917 に答える