Two options spring to mind.
This is one I used for a business directory, using the one2one relationship I can list the whole directory in one go or just the business entries. Here the is a shortened version of the model
class Category(models.Model):
name = models.CharField(max_length=12, unique=True)
description = models.TextField()
class Subcategory(models.Model):
category = models.ForeignKey(Category)
name = models.CharField(max_length=30, unique=True)
class Directory(models.Model):
name = models.CharField(max_length=60)
phone = models.CharField(max_length=15, blank=True)
mobile = models.CharField(max_length=15, blank=True)
etc.
class Business(Directory):
directory = models.OneToOneField(Directory, parent_link=True, related_name="business_entries")
cat = models.ForeignKey(Subcategory, limit_choices_to = {'category__exact': 2})
more fields....
def save(self):
self.category='business'
super(Business, self).save()
def subcatname(self):
return self.subcategory__name
def full_category(self):
return 'Business - '+self.subcategory__name
class Community(Directory):
directory = models.OneToOneField(Directory, parent_link=True, related_name="community_entries")
cat = models.ForeignKey(Subcategory, limit_choices_to = {'category__exact': 3})
class Tourism(Directory):
directory = models.OneToOneField(Directory, parent_link=True, related_name="tourism_entries")
cat = models.ForeignKey(Subcategory, limit_choices_to = {'category__exact': 4})
alternatively, you could pickle your custom data and put it into a text field. This would not be searchable however.