十二 Django 1.5.4 外键操作

一.models.py

from django.db import models


class cliente(models.Model):
        nombre                = models.CharField(max_length=200)
        apellidos        = models.CharField(max_length=200)
        status                = models.BooleanField(default=True)

        def __unicode__(self):
                nombreCompleto = "%s %s"%(self.nombre,self.apellidos)
                return nombreCompleto

class categoriaProducto(models.Model):
        nombre         = models.CharField(max_length=200)
        descripcion = models.TextField(max_length=400)

        def __unicode__(self):
                return self.nombre

class producto(models.Model):

        def url(self,filename):
                ruta = "MultimediaData/Producto/%s/%s"%(self.nombre,str(filename))
                return ruta


        nombre                = models.CharField(max_length=100)
        descripcion        = models.TextField(max_length=300)
        status                = models.BooleanField(default=True)
        imagen                 = models.ImageField(upload_to=url,null=True,blank=True)
        precio                = models.DecimalField(max_digits=6,decimal_places=2)
        stock                = models.IntegerField()
        categorias        = models.ManyToManyField(categoriaProducto,null=True,blank=True)

        def __unicode__(self):
                return self.nombre

二.admin.py

from django.contrib        import admin
from demo.apps.ventas.models import cliente,producto,categoriaProducto

admin.site.register(cliente)
admin.site.register(producto)
admin.site.register(categoriaProducto)

三.views.py

from django.shortcuts import render_to_response
from django.template import RequestContext
from demo.apps.ventas.models import producto
from demo.apps.home.forms import ContactForm, LoginForm
from django.core.mail import EmailMultiAlternatives # Enviamos HTML

from django.contrib.auth import login,logout,authenticate
from django.http import HttpResponseRedirect
# Paginacion en Django
from django.core.paginator import Paginator,EmptyPage,InvalidPage

def index_view(request):
        return render_to_response('home/index.html',context_instance=RequestContext(request))

def about_view(request):
        mensaje = "Esto es un mensaje desde mi vista"
        ctx = {'msg':mensaje}
        return render_to_response('home/about.html',ctx,context_instance=RequestContext(request))

def productos_view(request,pagina):
        lista_prod = producto.objects.filter(status=True) # Select * from ventas_productos where status = True
        paginator = Paginator(lista_prod,5) # Cuantos productos quieres por pagina? = 3
        try:
                page = int(pagina)
        except:
                page = 1
        try:
                productos = paginator.page(page)
        except (EmptyPage,InvalidPage):
                productos = paginator.page(paginator.num_pages)
        ctx = {'productos':productos}
        return render_to_response('home/productos.html',ctx,context_instance=RequestContext(request))

def singleProduct_view(request,id_prod):
        prod = producto.objects.get(id=id_prod)
        cats = prod.categorias.all() # Obteniendo las categorias del producto encontrado
        ctx = {'producto':prod,'categorias':cats}
        return render_to_response('home/SingleProducto.html',ctx,context_instance=RequestContext(request))


def contacto_view(request):
        info_enviado = False # Definir si se envio la informacion o no se envio
        email = ""
        titulo = ""
        texto = ""
        if request.method == "POST":
                formulario = ContactForm(request.POST)
                if formulario.is_valid():
                        info_enviado = True
                        email = formulario.cleaned_data['Email']
                        titulo = formulario.cleaned_data['Titulo']
                        texto = formulario.cleaned_data['Texto']

                        # Configuracion enviando mensaje via GMAIL
                        to_admin = 'alexexc2@gmail.com'
                        html_content = "Informacion recibida de [%s] <br><br><br>***Mensaje****<br><br>%s"%(email,texto)
                        msg = EmailMultiAlternatives('Correo de Contacto',html_content,'from@server.com',[to_admin])
                        msg.attach_alternative(html_content,'text/html') # Definimos el contenido como HTML
                        msg.send() # Enviamos en correo
        else:
                formulario = ContactForm()
        ctx = {'form':formulario,'email':email,'titulo':titulo,'texto':texto,'info_enviado':info_enviado}
        return render_to_response('home/contacto.html',ctx,context_instance=RequestContext(request))


def login_view(request):
        mensaje = ""
        if request.user.is_authenticated():
                return HttpResponseRedirect('/')
        else:
                if request.method == "POST":
                        form = LoginForm(request.POST)
                        if form.is_valid():
                                username = form.cleaned_data['username']
                                password = form.cleaned_data['password']
                                usuario = authenticate(username=username,password=password)
                                if usuario is not None and usuario.is_active:
                                        login(request,usuario)
                                        return HttpResponseRedirect('/')
                                else:
                                        mensaje = "usuario y/o password incorrecto"
                form = LoginForm()
                ctx = {'form':form,'mensaje':mensaje}
                return render_to_response('home/login.html',ctx,context_instance=RequestContext(request))

def logout_view(request):
        logout(request)
        return HttpResponseRedirect('/')

四.SingleProducto.html

{% extends 'base.html' %}
{% block title %} Producto {{producto.nombre}} {% endblock %}
{%block content %}
<h1> {{ producto.nombre }}</h1><br>
<img src="/media/{{ producto.imagen }}" width="150px" heigth="150px"/>
<p> {{ producto.descripcion }}</p>
<p> ${{ producto.precio }}</p>
<p> Cantidad en Existencia: {{ producto.stock }} Unidades </p>
<br>
<h5> Categorias:</h5>
{% for cat in categorias %}
<span class="label label-info"> {{cat.nombre}}</span>
{% endfor %}
<br><br>
{% if producto.stock > 0 %}
        <a class="btn btn-primary" href="#"> Comprar Producto </a>
{% endif %}
<a class="btn btn-primary" href="javascript:window.history.go(-1);"> Regresar a la Lista </a>
{% endblock %}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值