Files
consumocuidado-server/products/models.py

81 lines
3.3 KiB
Python

from django.contrib.gis.db import models
from tagulous.models import SingleTagField, TagField, TagTreeModel
from companies.models import Company
# Create your models here.
class TreeTag(TagTreeModel):
class TagMeta:
initial = ""
force_lowercase = False
max_count=20
protect_all = True
# autocomplete_view = 'myapp.views.hobbies_autocomplete'
class CategoryTag(TagTreeModel):
class TagMeta:
initial = ""
force_lowercase = False
protect_all = True
# autocomplete_view = 'myapp.views.hobbies_autocomplete'
class AttributeTag(TagTreeModel):
class TagMeta:
initial = ""
force_lowercase = False
max_count=20
protect_all = True
# autocomplete_view = 'myapp.views.hobbies_autocomplete'
class Product(models.Model):
SYNCHRONIZED = 'SYNCHRONIZED'
IMPORTED = 'IMPORTED'
MANUAL = 'MANUAL'
SOURCES = (
(SYNCHRONIZED, 'Sincronizado'),
(IMPORTED, 'Importado'),
(MANUAL, 'Manual'),
)
company = models.ForeignKey(Company, on_delete=models.DO_NOTHING, null=True, blank=True)
sku = models.CharField('Referencia de producto', max_length=255, null=True, blank=True )
name = models.CharField('Nombre del producto', max_length=500, null=True, blank=True)
description = models.TextField('Descripción', null=True, blank=True)
image = models.ImageField('Imagen del producto', upload_to='products/', null=True, blank=True)
url = models.URLField('URL del producto', null=True, blank=True, max_length=1000)
price = models.DecimalField('Precio', max_digits=10, decimal_places=2, null=True, blank=True)
shipping_cost = models.DecimalField('Gastos de envío', max_digits=10, decimal_places=2, null=True, blank=True)
shipping_terms = models.TextField('Condiciones de envío', null=True, blank=True)
source = models.CharField('Fuente', choices=SOURCES, max_length=25, null=True, blank=True)
sourcing_date = models.DateTimeField('Fecha de importación original de producto', null=True, blank=True)
update_date = models.DateTimeField('Fecha de actualización de producto', null=True, blank=True)
discount = models.DecimalField('Descuento', max_digits=5, decimal_places=2, null=True, blank=True)
stock = models.PositiveIntegerField('Stock', null=True, blank=True)
tags = TagField(to=TreeTag, blank=True)
category = SingleTagField(to=CategoryTag, null=True, blank=True, on_delete=models.SET_NULL) # main tag category
attributes = TagField(to=AttributeTag, blank=True, related_name='product_attributes')
identifiers = models.TextField('Identificador único de producto', null=True, blank=True)
active = models.BooleanField('Mostrar producto', default=False)
# internal
created = models.DateTimeField('date of creation', auto_now_add=True)
updated = models.DateTimeField('date last update', auto_now=True)
creator = models.ForeignKey('core.CustomUser', on_delete=models.SET_NULL, null=True, related_name='product')
history = models.ForeignKey('history.HistorySync', on_delete=models.SET_NULL, null=True, related_name='product')
def __str__(self):
return f"{self.name} / {self.sku}"
class Meta:
verbose_name = "Producto"
verbose_name_plural = "Productos"