2016-07-07 11 views
0

私はdropzone.js経由で画像をアップロードするためにフォームを使用しています。画像は保存され、正常にアップロードされます。しかし、それは空のフィールドを持つ新しいモデルを作成しています。私は参照している既存のモデルに画像を保存したいです。しかし、私はそれを参照する解決策を見つけることができないようです。ここに私のコードです:アップロード画像をDjangoのexisitngモデルに保存

views.py

def client_view(request, pk): 
client = get_object_or_404(Client, pk=pk) 

if request.method == 'POST': 
    form = UploadFileForm(request.POST, request.FILES) 
    if form.is_valid(): 
     picture = form.save() 

    else: 
     form = UploadFileForm() 

    data = {'form': form} 
    return render_to_response('client_view.html', locals(),  RequestContext(request), {"img": picture}) 

return render(request, 'client_view.html', {'client': client}) 

urls.py

url(r'^client/(?P<pk>\d+)/$', client_view, name='client_view'), 

forms.py

class UploadFileForm(forms.ModelForm): 
    class Meta: 
     model = Client 
     fields = ('image',) 
(私はエラーがここにあると思います)

models.py

class Client(models.Model): 
customer_nr = models.IntegerField(null=True) 
last_name = models.CharField(max_length=30, null=True) 
first_name = models.CharField(max_length=30, null=True) 
birthdate = models.DateField(null=True) 
address = models.CharField(max_length=50, null=True) 
image = models.ImageField("Image", upload_to='files/%Y/%m', null=True, blank=True) 

client_view.html

<form action="{% url 'client_view' pk=client.pk %}" class="dropzone"  id="myDropzone"> 

    {% csrf_token %} 

<div class="fallback"> 
    <input name="file" type="file" multiple/> 
</div> 

</form> 

<script type="text/javascript"> 
    Dropzone.options.myDropzone = { 
    paramName: "image", 
    autoProcessQueue : true, 
    parallelUploads: 1, 

    init: function() { 

     this.on("success", function(file, responseText) { 

      console.log(responseText); 

     }); 

    } 

    }; 



</script> 

は、すべてのヘルプは本当にいただければ幸いです!ありがとう!それはモデルに新しいインスタンスを作成しているので、私の意見では

答えて

0

Django specified wayは、既存のモデルを使用してModelFormをインスタンス化することですlike-何かを提案したいと思いますリクエストすると、自動的に画像が正しいモデルに保存されます。

GETリクエストの場合、ブラウザに表示される前に、モデルに関連付けられているイメージがフォームフィールドに追加されます(存在する場合)。

+0

また、動作します、ありがとう! :) – Progph

+0

@Progph [コメント欄で感謝の気持ちにする](http://meta.stackexchange.com/a/126184) –

0

は、

form.save() 

を使用しないでください。

あなたviews.pyで:POSTについては

client = get_object_or_404(Client, pk=pk) 

if request.method == 'POST': 
    form = UploadFileForm(request.POST, request.FILES, client) 
    if form.is_valid(): 
     picture = form.save() 

else: 
    form = UploadFileForm(client) 

むしろ私は

def client_view(request, pk): 
    client = get_object_or_404(Client, pk=pk) 

    if request.method == 'POST': 
     form = UploadFileForm(request.POST, request.FILES) 
     if form.is_valid(): 
      client.image = form.cleaned_data.get('image', None) 
      picture = client.save() 

     else: 
      form = UploadFileForm() 

     data = {'form': form} 
     return render_to_response('client_view.html', locals(), RequestContext(request), {"img": picture}) 

    return render(request, 'client_view.html', {'client': client}) 
関連する問題