簡體   English   中英

將上傳的圖像保存到Django中的exisitng模型

[英]Save Uploaded Image to exisitng Model in Django

我正在使用表單通過dropzone.js上傳圖片。 圖片被保存並上傳正常。 但是它正在創建一個具有空字段的新模型。我想將圖片保存到我要引用的現有模型中。 但是我似乎找不到引用它的解決方案。 這是我的代碼:

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'),

表格

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>

任何幫助將非常感激! 謝謝!

我認為,不要使用

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

Django指定的方法是使用現有模型實例化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請求,這會將當前與模型關聯的圖像(如果有)附加到表單字段,然后發送給瀏覽器呈現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM