Рубрики
Без рубрики

Tipos de Herencia en Modelos de django

VECES, CuAndo Crowsos Modelos En Django Queremos Raule Ciertas Características En Común A Varios de … Теги с Джанго, Питоном, Эспанолом, Испанским.

Django (7 часть серии)

VECES, CUANDO Crowsos Modelos EN Django Queremos Darle Ciertas Caracteristicas En Común A Varios de Nuestros Modelos. Пробланменте, La Aproximación Que Se Nos Vendría Primero A La Mente Sería Repetir Los Campos Una Y Otra Vez. Lo Anterhorion NoS Traería DOS-задачи; El Primero, estamos repitiendo información; Эль Сегундо, С.И. Керемос Агрогар Отро Campo En Común Tendremos Que Modififar Cada Uno de Los Modelos. ESTA Smoodática es la que resualve la herencia de modelos de django.

# Nota como se repiten múltiples campos en los dos modelos
from django.db import models

class Product(models.Model):
    name = models.CharField(max_length=150)
    description = models.TextField()
    manufacter = models.ForeignKey(Manufacter, on_delete=models.CASCADE)
    modified = models.DateTimeField(auto_now=True)
    created = models.DateTimeField(auto_now_add=True)

class Manufacturer(models.Model):
    name = models.CharField(max_length=100)
    description = models.TextField()
    modified = models.DateTimeField(auto_now=True)
    created = models.DateTimeField(auto_now_add=True)

# ... otros diez modelos con los mismos campos abajo

Tipos de Herencia en django

Hey Tres Tipos de Herencia Disonible Y CADA UNO SE Comporta de Manera Diferente Nivel Tabla:

  • Абстрактный
  • Multi Tabla.
  • Прокси

Para Este Ejemplo Estaré Usando La Versión de django 3.1 Y Python 3.7

Эстерия Аннотация

Este Tipo de Herencia NoS Perious Poner Una Variedad de Campos en Común Que deseamos que inkluyan los modelos que hereden de este. PARA DEFIR UN MODEO COMO AUBDEO BASTA CON AGREGAR LA CLASE Мета que contenga un atributo llamado Аннотация Игвала Правда Отказ Django No Va Crage Ninguna Tabla Para Un Modelo Con Meta.abstract Отказ

from django.db import models

class BasicData(models.Model):
    modified = models.DateTimeField(auto_now=True)
    created = models.DateTimeField(auto_now_add=True)

    class Meta:
        abstract = True

class Product(BasicData):
    name = models.CharField(max_length=150)
    description = models.TextField()

class ShippingMethod(BasicData):
    name = models.CharField(max_length=150)
    description = models.TextField()
    price = models.PositiveIntegerField()

En El Ejemplo de Arriba Ambos Modelos Incluirán Los Campos de модифицированный y Создано Sin Embargo Django Нет Creará Ninguna Tabla Para El Modelo PicaseData .

Herencia Multi Tabla.

En este tipo de herencia django Sí Creará Una Tabla POR CADA MODEO (POR ESO SE LLAMA MULTI TALLA). Además Unirá Ambos Modelos Automáticamente POR Medio de Un Campo OneToonefield En el Modelo Hijo.

from django.db import models

class Place(models.Model):
    name = models.CharField(max_length=150)
    address = models.CharField(max_length=150)
    modified = models.DateTimeField(auto_now=True)
    created = models.DateTimeField(auto_now_add=True)

class Cafe(Place):
    number_of_employees = models.IntegerField()
    speciality_coffee_available = models.BooleanField(default=False)

EN EL EJEMPLO DE ARRIBA PUEDE QUE NOS TENESE TENER AMBOS MODESOS, PODEMOS FILTRAR POR PLUCE Y LUEGO PODEMOS ACCEDER Al Hijo Por Medio de Su Relación Uno Uno Усандо Су Намбре де Модель-н-минушка.

myFavoriteCafe = Place.objects.get(name="Matraz cafe")
print("Matraz Cafe has {} employees".format(myFavoriteCafe.cafe.number_of_employees))

Herencia Proxy

Este Tipo de Herencia SE США Para Cambiar O Extender El Comportamiento de un Modelo. PARA CREARLO BASTA CON ANADIR LA CLASE Мета Con El Atributo прокси Игвала Правда Отказ EN ESTE CASO CASO AMMOS MODEOS SE ENCUENTRAN EN LA MISSA Tabla Y PodeMos Crage, Acceder, Actionizar O Borrar Los Datos Usando Cualquiera De Sus Modelos.

from django.db import models

class BaseProduct(models.Model):
    modified = models.DateTimeField(auto_now=True)
    created = models.DateTimeField(auto_now_add=True)
    name = models.CharField(max_length=150)

    def __str__(self):
        return "{} created at {}".format(self.name, self.created.strftime("%H:%M")) 

class OrderedContent(BaseProduct):
    class Meta:
        proxy = True
        ordering = ['-created']

EN E EL EJEMPLO DE ARRIBA TENEMOS UN NUEVO MODEOO TENEMOS ON NUEVO MODEOO QUE Определите ООН Ordenado Credeterminado Por Medio Del Atributo. Es decir. , Suponiendo Que Tuviéramos Una Tabla Con Datos Podriamos Accenter A Los Mismos DE DE DJANGO.

from app.models import BaseProduct, OrderedContent

# Mismos datos, orden predeterminado
BaseProduct.objects.all()
, , ]>

# Mismos datos, orden inverso
OrderedContent.objects.all()
, , ]>

COMO PUEDES VER PUDIMOS ACCEDER A LOS MISMOS TRES OBJETOS DE LA BACE DE DETOS Desde Ambos Modelos , против La Diferencia de que en El Modelo. ЗаказКОНТЕНТ nuestros objetos aparecen ordenados позывающееся concepto al Campo Создано Отказ

Sí Quieres Saber Más Sobre Django, PueSeo Recomendarte Algunos Libros. Ли Ми-reseña sobre un libro Genial que te enseña buenas prácticas de django en Este invenace Отказ

Sígueeme en twitter.

Twitteo Frecuendemente Información Interesante Sobre Desarrollo Web Y Tecnología Que Encuentro en Интернет.

Y TE AVISO CADA QUE TENGA UNA NUEVA ENTRADA.

Django (7 часть серии)

Оригинал: “https://dev.to/silicosis/tipos-de-herencia-en-modelos-de-django-1g66”