Trade:
name = CharField
description = CharField
category = Category
tags = TagField
# Good sería la clase base para los bienes
Good(Trade):
state = Choice(Available, Reserved, Not available)
# Loan representaría un préstamo, propongo poner
# un campo opcional para especificar el tiempo
# máximo que lo prestas.
Loan(Good):
max_time = CharField
# Gift representaría un regalo, si communal es
# verdadero es un bien comunitario. No desaparece
# de la red cuando pasa de un usuario a otro.
Gift(Good):
communal = BooleanField
On Nov 18, 1:22 am, "Alejandro (dialelo)" <alejandroogo...@gmail.com>
wrote:
---
class Trade(models.Model): """ Represents an object or action
which can be part of a trade within our network. """ name
= models.CharField(_('name'), max_length=124) description =
models.TextField(_('description')) # XXX Are we going to allow
uncategorized trades? category = models.ForeignKey(Category)
owner = models.ForeignKey(BaseUser) tags =
TaggableManager()
class Meta: abstract = True def
__unicode__(self): return u'%s' % self.name---
Nos hemos dado cuenta de que hay que diferenciar entre ofertas y
demandas a nivel de modelos ya que ``Trade`` es
muy poco específico y el objetivo de ambos tipos de intercambio es
diferente. En una oferta (``TradeOffer``) tendríamos
un parámetro que controle su visibilidad (para hacerla invisible
cuando dejan de estar activas). ¿Qué os parece si
hacemos abstracta esta clase también? Nunca la vamos a instanciar
directamente ya que una oferta tiene que ser o bien
o servicio.
---class TradeOffer(Trade): """ Represents a trade that is
offered by its owner. """ # XXX Maybe we should include a field
to control the trade's visibility. # This way, when the user
gives it to somebody else or it's no longer # available can be
'erased' changing this field to False. visible =
models.BooleanField(_('visible'), default=True)
class Meta:
abstract = True
---
Esta es la clase que representa un préstamo, tiene tres estados y
quizá deberíamos dar la posibilidad de especificar
el tiempo máximo durante el que se presta.
---class Loan(TradeOffer):
"""
Represents a good that is available for loan.
"""
STATUS_CHOICES = (
(1, _('Available')),
(2, _('Reserved')),
(3, _('Not available')),
)
status = models.IntegerField(_('status'), choices =
STATUS_CHOICES, default = 1)
# XXX: Are we going to specify time ranges for loans? Could be
optional
class Meta:
verbose_name = _('loan')
verbose_name_plural = _('loans')
---
A continuación la clase que representa un regalo, está la posibilidad
de marcarlo como "comunitario", lo que
haría que el bien fuera pasando de dueño en dueño pero sin pasar a ser
invisible, es decir, que se quedara
en la red.
---
class Gift(TradeOffer):
"""
Represents a good that is gifted by its owner.
"""
# XXX A gift can pass from non-communal to communal, but not the
other way!
communal = models.BooleanField(_('communal'))
available = models.BooleanField(_('available'))
class Meta:
verbose_name = _('gift')
verbose_name_plural = _('gifts')
---
En cuanto a las demandas, concreta la clase ``Trade`` (información
general) y hemos pensado en la opción de
especificar (opcionalmente) el tipo de lo que se está demandando para
filtrar mejor las sugerencias.
---class TradeDemand(Trade): # XXX very provisional. TYPE_CHOICE
= ( (0, _('All')), (1, _('Service')), (2, _('Good
for loan')), (3, _('Good for gift')), (4, _('Communal
good')), ) trade_type = models.IntegerField(_('type'), choices =
TYPE_CHOICE, default = 1) # TODO field for specifying if the demand
is still being required.---
Perdón por hacer tan largo este email pero es donde estamos
discutiendo ``Trade`` así que no tenía remedio.
On Nov 25, 4:03 pm, "Alejandro (dialelo)" <alejandroogo...@gmail.com>
wrote: