2016-07-07 69 views
0

我正在使用表格通过dropzone.js上传图片。图片被保存并上传正常。但是它创建了一个带有空字段的新模型。我想将图片保存到我参考的现有模型中。但我似乎无法找到引用它的解决方案。这里是我的代码:保存已上传的图像到exisitng Django中的模型

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

在你views.py

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) 

对于POST请求,这会自动将图像保存到正确的模型。

对于GET请求,这会将当前与模型相关联的图像(如果有)附加到表单字段,然后才会将其发送到浏览器。

+0

也适用,谢谢! :) – Progph

+0

@Progph [感谢评论部分](http://meta.stackexchange.com/a/126184) –

0

在我看来,因为它是建立在模型中一个新的实例不使用

form.save() 

。而是我想提出一些喜欢 -

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})