models.py
from django.db import models # Create your models here. class Conteudo(models.Model): """(Conteudo description)""" # ... # SEUS ATRIBUTOS AQUI # ... class Meta: verbose_name, verbose_name_plural = u"Conteúdo" , u"Conteúdos" class Foto(models.Model): """(Foto description)""" conteudo= models.ForeignKey(Conteudo, verbose_name=u'Conteúdo') imagem = models.ImageField(upload_to="uploads/conteudos/imagem/%Y") class Meta: verbose_name, verbose_name_plural = u"Foto" , u"Fotos" ordering = ('id',) def __unicode__(self): return "%s" % str(self.imagem)
forms.py
from django.forms.models import inlineformset_factory from models import Conteudo, Foto class ConteudoForm(forms.ModelForm): class Meta: model = Conteudo FotoFormSet = inlineformset_factory(Conteudo, Foto, extra=1)
views.py
from models import * from django.shortcuts import render_to_response, get_object_or_404, redirect from django.template import Context, loader, RequestContext from django.core.context_processors import csrf from forms import ConteudoForm, FotoFormSet def conteudo_enviar(request): ret = '' if request.POST: c = {} c.update(csrf(request)) r = request.POST f = request.FILES form = ConteudoForm(r,f) formset = FotoFormSet(r,f) if form.is_valid() and request.FILES: try: form.save() formset.instance = get_object_or_404(Conteudo, id=form.instance.id) formset.save() ret = u'Conteúdo enviado com sucesso.' # ZERANDO O FORM form = ConteudoForm() formset = FotoFormSet() except: ret = u'Erro ao enviar o conteúdo' elif request.FILES: for field in form: if field.errors: ret += "%s: %s" % (field.label, striptags(str(field.errors)) ) else: ret += "Imagem: pelo menos uma imagem do conteúdo deve ser enviada" else: form = ConteudoForm() formset = FotoFormSet() VARS = { 'form':form, 'formset':formset, 'ret':ret, } return render_to_response('conteudo_template.html', VARS, context_instance=RequestContext(request))
conteudo_template.html
<script type="text/javascript" src="http://underscorejs.org/underscore-min.js"></script> <script type="text/html" id="foto-template"> <div id="foto-<%= id %>" class="imagem"> <input id="id_foto_set-<%= id %>-id" type="hidden" name="foto_set-<%= id %>-id"> <label for="id_foto-<%= id %>-title">Imagem:</label> <input id="id_foto_set-<%= id %>-imagem" class="file" type="file" name="foto_set-<%= id %>-imagem"> <input type="hidden" name="foto-<%= id %>-acao" id="id_foto-<%= id %>-acao"> <input type="hidden" name="foto-<%= id %>-id" id="id_foto-<%= id %>-id"> {% if not request.META.HTTP_USER_AGENT|isIE %} <div class="filename"></div> <div class="button-container"> <input type="button" name="filebutton" class="filebutton" value="Procurar"> </div> {% endif %} </div> </script> <script type="text/javascript"> jQuery(document).ready(function($) { // Stuff to do as soon as the DOM is ready; $('.add-foto').click(function(ev){ ev.preventDefault(); var count = $('.fotos').children().length; var tmplMarkup = $('#foto-template').html(); var compiledTmpl = _.template(tmplMarkup, { id : count }); $('div.fotos').append(compiledTmpl); // update form count $('#id_foto_set-TOTAL_FORMS').attr('value', count+1); console.log(count+1); }); }); </script> {{ formset.management_form }} <div class="fotos"> {% for foto_form in formset %} <div id="foto-{{ forloop.counter0 }}" class="imagem"> {{ foto_form.id }} {% if request.META.HTTP_USER_AGENT|isIE %} {# IE HACK PARA INPUT FILE #} {{ foto_form }} {# <input type="file" id="id_imagem" name="imagem[]" class="file" style="right:0; height: 50px; width:478px; position:absolute;opacity:1.0;filter:alpha(opacity=100);"> #} {% else %} {{ foto_form }} <div class="filename"></div> <div class="button-container"> <input type="button" name="filebutton" class="filebutton" value="Procurar"> </div> {% endif %} </div> {% endfor %} </div> <div class="form-actions"> <button class="medium green add-foto">Adicionar mais fotos</button> </div>
Para as class-based views, mostrarei como fazer no próximo post. hasta!
Nenhum comentário:
Postar um comentário