On Mar 16, 3:21 am, ALJ <astley.lejas...@gmail.com> 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 django-us...@googlegroups.com. To unsubscribe from this group, send email to django-users+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-users?hl=en.