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.

