2016-04-27 5 views
0

jeden ,, kann ich Bild von Admin-Seite laden ,, aber nicht wissen, wie aus den Vorlagen hochladen Bild ,,django Upload-Image-Datei von Vorlagen

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) #image file 

    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 
from .models import ProductsTbl 
from django.template.defaultfilters import slugify 
from django.contrib.auth.decorators import login_required 
from django.http import Http404,HttpResponse 
import datetime 

def create_thing(request): 
    form_class = ProductsTblForm 

    if request.method == 'POST': 

     form = form_class(request.POST) 
     if form.is_valid(): 

      thing = form.save(commit=False) 

      thing.user = request.user 
      thing.slug = slugify(thing.model_number) 

      thing.save() 

      return redirect('thing_detail', slug=thing.slug) 

    else: 
     form = form_class() 
    return render(request, 'things/create_thing.html', { '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'^create_thing/$', views.create_thing, name='create_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 


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

create_thing.html

{% extends 'base.html' %} {% block title %} 
Create a Thing - {{ block.super }} {% endblock title %} 
{% block content %} 
<h1>Create a Thing</h1> 
<form role="form" action="" method="post"> 
{% csrf_token %} 
{{ form.as_p }} 
<input type="submit" value="Submit" /> 
</form> 
{% endblock content %} 

wenn ich auf die Dinge erstelle ich Formular hier sehen ,, aber ich weiß nicht, wie das Bild

enter image description here laden lassen kann

Ich habe Suche this link ,, aber ich weiß nicht, wie man Lass es in meiner App funktionieren,

+1

Erstellen Sie bilden durch 'form_class (request.POST, request.FILES)' statt 'form_class (request.POST)' sollte genügen. –

+0

Ich füge request.FILES wie ,, form = form_class (request.POST, request.FILES) ,,, aber wenn ich upload ,, es gibt kein Bild in midea/,,, ?? –

Antwort

1

Zuerst müssen Sie enctype="multipart/form-data" in Ihre <form> Definition hinzufügen. Dies ist für das Hochladen von Dateien erforderlich.

<form role="form" action="" method="post" enctype="multipart/form-data"> 

Zweitens statt form_class(request.POST) müssen Sie, indem request.FILES zu bilden in Ihrer Ansicht erstellen.

form_class(request.POST, request.FILES) 
+0

danke, es funktioniert^^ –