2016-04-28 90 views
0

每一個,,我有一個模板,它可以編輯我的數據到數據庫,但是,當我嘗試從模板上傳圖像,,,只是失敗,,任何人都可以告訴我我怎麼能代碼時,工作好,謝謝django編輯並上傳圖像模板

models.py

from django.db import models 
from django.contrib.auth.models import User 
from PIL import Image 
from django.utils import timezone 



def get_imagep_Product(instance, filename): 
    return '/'.join(['products', instance.slug, filename]) 


class ProductsTbl(models.Model): 
    model_number = models.CharField(max_length=255, blank=True, null=True) 
    name = models.CharField(max_length=255, blank=True, null=True) 
    material = models.TextField(blank=True, null=True) 
    feature = models.TextField(blank=True, null=True) 
    created = models.DateTimeField(editable=False) 
    modified = models.DateTimeField(auto_now=True) 
    release = models.DateTimeField(blank=True, null=True) 
    submit_date = models.DateTimeField(blank=True, null=True) 
    slug = models.SlugField(unique=True) 
    user = models.ForeignKey(User, blank=True, null=True) 
    image = models.ImageField(upload_to=get_imagep_Product, blank=True) #try to upload this image from templates 

    def __unicode__(self): 
     return self.name 
    def save(self, *args, **kwargs): 
     ''' On save, update timestamps ''' 

     if not self.id: 
      self.created = timezone.now() 
     return super(ProductsTbl, self).save(*args, **kwargs) 

.... 

views.py

from django.shortcuts import render,redirect 
from .forms import ProductsTblForm,ProductsTblUploadForm 
from .models import ProductsTbl,Upload 
from django.template.defaultfilters import slugify 
from django.contrib.auth.decorators import login_required 
from django.http import Http404,HttpResponse 
import datetime 
.... 
@login_required 
def edit_thing(request, slug): 
# grab the object... 
    thing = ProductsTbl.objects.get(slug=slug) 
    if thing.user != request.user: 
     raise Http404 
# set the form we're using... 
    form_class = ProductsTblForm 
    if request.method == 'POST': 
# grab the data from the submitted form 
     form = form_class(data=request.POST,instance=thing) 
     if form.is_valid(): 
      # save the new data 
      form.save() 
      return redirect('thing_detail', slug=thing.slug) 
# otherwise just create the form 
    else: 
     form = form_class(instance=thing) 
# and render the template 
    return render(request, 'things/edit_thing.html', { 
     'thing': thing, 
     'form': form, 
    }) 
.... 

urls.py

from django.conf.urls import patterns, url,include 
from django.contrib import admin 
from django.views.generic import TemplateView 
from designer import views 
from designer.backends import MyRegistrationView 
from django.conf import settings 

urlpatterns = [ 
    .... 
    url(r'^things/(?P<slug>[-\w]+)/edit/$', views.edit_thing, name='edit_thing'), 
    .... 
] 

if settings.DEBUG: 
    urlpatterns += [ 
     url(r'^media/(?P<path>.*)$', 'django.views.static.serve', { 
      'document_root': settings.MEDIA_ROOT, 
     }), 
    ] 

forms.py

from django.forms import ModelForm 
from .models import ProductsTbl,Upload 


class ProductsTblForm(ModelForm): 
    class Meta: 
     model = ProductsTbl 
     fields = ('model_number','name','feature', 'material','release','image',) 
.... 

edit_thing.html

.... 
{% extends 'base.html' %} {% block title %} 
Edit {{ thing.name }} - {{ block.super }} {% endblock title %} 
{% block content %} 
<h1>Edit "{{ thing.name }}"</h1> 
<form role="form" action="" method="post" enctype="multipart/form-data" > 
{% csrf_token %} 
{{ form.as_p }} 

<br> 
<button type="submit">Submit</button> 

<a href="{% url 'edit_thing_uploads' slug=thing.slug %}"> Edit images</a> 
</form> 
{% endblock %} 

當我創建的東西,等我可以上傳圖像就像link here I asked yesterday

,然而,,當我嘗試編輯表單並上傳圖片只是失敗,,我不知道爲什麼?謝謝

enter image description here

+1

定義 「剛剛失敗」 – Sayse

+0

你的意思是views.py? –

+0

好的,我解決了這個問題,, views.py ,,,, form = form_class(data = request.POST,instance = thing)---> form = form_class(data = request.POST,files = request.FILES ,instance = thing),謝謝 –

回答

1

我解決了這個問題views.py

通過改變如下:

form = form_class(data=request.POST, instance=thing) 

到:

form = form_class(data=request.POST, files=request.FILES, instance=thing)