Hi Preston,

Sorry, I don't get it.

The certainly do have the same fields, but sometimes the fields are
derived from a linked table, or are a foreign key or sometimes text.
So I don't understand how having the interface adapt to what the
current type is would work.

ALJ

On Mar 16, 3:04 pm, Preston Holmes <[email protected]> wrote:
> On Mar 16, 3:21 am, ALJ <[email protected]> wrote:
>
>
>
> > This is a bit of a modeling question that I am struggling to get my
> > head around. How would you model this scenario?
>
> > I have to record expenses that are of 3 different types.
>
> > 1. Fixed - The name of the expense and unit amount are fixed. For
> > example, "inconvenience allowance" of £30 per day.
> > 2. Classified - The name of the expense is fixed, but the actual unit
> > amount isn't. For example "Hotel expenses". The actual unit amount
> > will depend on the hotel they stay at. They'll need to enter that
> > themselves.
> > 3. Unclassified - The name of the expense and the amount is arbitrary.
> > So they may have an expense we haven't thought of before but it needs
> > to go in.
>
> > Of course I'll need to create a summary that tots up the total
> > expenses for the particular event.
>
> whether you subclass a base model, or simply have a "type" field on
> your expense object is going to depend on the details and nuance of
> the rest of your business logic in your app.  I would only say that
> simple is better unless you have a reason or need for the complexity.
>
> Given that the fields between them are identical, I would probably
> just use a "type" choice field and have the interface adapt as needed.
>
> -Preston
>
>
>
> > Would the best way of doing this be:
>
> > a) Have a base model and then build on that for the 3 different
> > scenarios?
> > b) Have three different tables and then do a union on them?
>
> > Just for interest ... this is where I got so far, but am now stumped
>
> > class CostType(models.Model):
> >     name = models.CharField("Name", max_length=30) 'e.g. commission,
> > subsistence ...
>
> > class CostItem(models.Model):
> >     name = models.CharField("Name", max_length=50) 'e.g. product x,
> > inconvenience allowance, ...
> >     cost_type = models.ForeignKey(CostType, verbose_name="Type")
>
> > class Rate(models.Model):
> >     cost_item = models.ForeignKey(CostItem, verbose_name="Item")
> >     valid_from = models.DateField("From")
> >     valid_till = models.DateField("Till")
> >     unit_amount = models.DecimalField("Price Per Unit", max_digits=5,
> > decimal_places=2)
>
> > 'Costs with a fixed description and unit amount
> > class FixedCostList(models.Model):
> >     markettingevent= models.ForeignKey(Event)
> >     rate = models.ForeignKey(Rate)
> >     units = models.IntegerField()
>
> > 'Costs with a fixed description but arbitrary amount
> > class StructuredCostList(models.Model):
> >     markettingevent= models.ForeignKey(Event)
> >     cost_item = models.ForeignKey(CostItem, verbose_name="Item")
> >     unit_amount = models.DecimalField("Price Per Unit", max_digits=5,
> > decimal_places=2)
> >     units = models.IntegerField()
>
> > 'Costs with both a arbitrary description and amount
> > class OtherCostList(models.Model):
> >     markettingevent= models.ForeignKey(Event)
> >     description = models.CharField("Name", max_length=30)
> >     unit_amount = models.DecimalField("Price Per Unit", max_digits=5,
> > decimal_places=2)
> >     units = models.IntegerField()

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.

Reply via email to