2016-03-25 7 views
0

テキスト値を記述したファイルをアップロードして保存することはできません。私は理由を理解していない:フォームとモデルは明らかに関連分野を持っています。私の視点からテキストフィールドtekstへの参照を削除すると、ファイルを正しくアップロードして保存します。参考:モデルフィールドのサブディレクトリ構造の1つを使用しています。私のモデルにはdef get_upload_toOverig_Beeld.objects.createupload.save()ではなく、私の見解ではあります。テキストの説明付きのファイルをアップロード

モデル:

def get_upload_to(instance, filename): 
    return 'bulkafbeeldingen/%s/%s' % (instance.bulknummer, filename) 
class Overig_Beeld(models.Model): 
    file = models.FileField(upload_to=get_upload_to) 
    bestandnaam = models.CharField(max_length=256, null=True) 
    upload_date = models.DateTimeField(auto_now_add=True) 
    bulknummer = models.ForeignKey(Bulk, null=True) 
    tekst = models.CharField(max_length=512) 

フォーム:

class Overig_BeeldForm(forms.ModelForm): 
    file = forms.FileField() 
    tekst = forms.CharField(required=False) 
    class Meta: 
     model = Overig_Beeld 
     fields = ('file', 'tekst') 

テンプレート:

<form action="" method="post" enctype="multipart/form-data"> 
    {% csrf_token %} 
     <label for="file">Bestand:</label> 
     <input type="file" name="file"/> 
     <input type="text" name="tekst"/> 
     <input type="submit" value="Upload" /> 
</form> 

ビュー:

if request.method=="POST": 
    upload = Overig_BeeldForm(request.POST, request.FILES) 
    if upload.is_valid(): 
     f = request.FILES['file'] 
     Overig_Beeld.objects.create(file=f, bestandnaam=f.name, bulknummer=bulk, tekst=upload.tekst) 
    return redirect(reverse('bulk', args=(bulk.slug,))) 

エラー:

'Overig_BeeldForm' object has no attribute 'tekst' 

答えて

1

アップロードされたデータは、Djangoのフォームのインスタンスでcleaned_data属性に含まれています。だから、

text = upload.cleaned_data['tekst'] 

ことはあなたの問題を解決します

+0

おかげアンドレイは、私がcleaned_dataに慣れていないと私はあなたの提案は現在、私にエラーがスローされますよう、それを検討する必要があります。 '例外値を:U"キー「cleaned_data '' Overig_BeeldForm 'に見つかりません " – marckr

+0

@marckr私の悪い' cleaned_data'はキーではなく属性です。更新された回答 –

+0

ありがとうございました!完璧に動作します! – marckr

関連する問題