title: How should this multi-inheritance situation be handled?
body: <h1>The problem</h1>
  
  <p>I have the "base model" <code>Listing</code> which is responsible for storing basic data for every possible item we will be posting to our site. A <code>Listing</code> has the most basic details, while inherited models like <code>Equipment</code> or <code>Material</code> should extend it with required things like <code>price</code>. </p>
  
  <p>For example, we have a <code>Listing</code> we'd like to extend with <code>Equipment</code> specific fields.</p>
  
  <h1>My current attempt at solving it</h1>
  
  <p>I have the following models:</p>
  
  <pre><code>class Listing(models.Model):
      title = models.CharField(max_length=100)
      # listing stuff
  
  class AbstractListingGood(models.Model):
      price = MoneyField(max_digits=10, decimal_places=2, default_currency='USD', null=True, blank=True)
      # other listing goods details
  
      class Meta:
          abstract = True
  
  class Equipment(AbstractListingGood, Listing):
      year = models.PositiveIntegerField(max_length=4, null=True, blank=True)
      make = models.CharField(max_length=50, null=True, blank=True)
      model = models.CharField(max_length=50, null=True, blank=True)
      # equipment details
  
  class Material(AbstractListingGood, Listing):
      hazardous = models.CharField(max_length=50, null=True, blank=True)
  </code></pre>
  
  <p>And here's how I'm trying to create the base <code>Listing</code> object and extend it to have <code>Equipment</code> fields:</p>
  
  <pre><code>extended_obj = Material(listing_ptr_id=obj.pk)
  extended_obj.price = form.cleaned_data['price']
  extended_obj.quantity = int(form.cleaned_data['quantity'])
  
  for (key, value) in obj.__dict__.items():
      setattr(extended_obj, key, value)
  
  extended_obj.save()
  </code></pre>
  
  <h1>The problem with my solution</h1>
  
  <p>I used to just have all of the fields present in <code>Listing</code> like <code>price</code>, <code>year</code>, <code>make</code>, etc. but they were taking up space and made the <code>Listing</code> model kind of ugly. We wanted to split it off into separate more lightweight and extensible models.</p>
  
  <p>Now I have all kinds of problems trying to find <code>Listing.material.price</code> versus <code>Listing.equipment.price</code> and lots of mis-understanding of what's happening in the backend.</p>
  
  <p>What should I do!? How should I solve this problem? Is it a huge no-no to have a Model with ~15-20 potentially empty fields that are unused?</p>