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: