title: Error creating several recursive m2m relationships
body: <p>I need to store the relations between people. So I have the following models</p>
  
  <pre><code>class Person(models.Model):
      name = models.CharField(max_length=255, blank=True)
      parents = models.ManyToManyField('self', through='PersonRelationship', symmetrical=False, blank=True, related_name="person_parents_set")
      friends = models.ManyToManyField('self', through='PersonRelationship', symmetrical=False, blank=True, related_name="person_friends_set") 
  
  class PersonRelationship(models.Model):
      from_person = models.ForeignKey(Person, related_name="from_persons")
      to_person = models.ForeignKey(Person, related_name="to_persons")
      relation_start = models.DateField(blank=True)
      relation_end = models.DateField(blank=True)
  </code></pre>
  
  <p>When I try to syncdb I get this error:</p>
  
  <pre><code>Error: One or more models did not validate:
  films.person: The model Person has two manually-defined m2m relations through the model PersonRelationship, which is not permitted. Please consider using an extra field on your intermediary model instead.
  </code></pre>
  
  <p>I guess I cannot have two m2m relationships trough the same model, so I tried to create a model for each type of relation, to avoid repeating myself I used a abstract model like this:</p>
  
  <pre><code>class PersonRelationship(models.Model):
      from_person = models.ForeignKey(Person, related_name="from_persons")
      to_person = models.ForeignKey(Person, related_name="to_persons")
      relation_start = models.DateField(blank=True)
      relation_end = models.DateField(blank=True)
  
      class Meta:
          abstract = True
  
  class PersonParent(PersonRelationship):
      pass 
  
  class PersonFriend(PersonRelationship):
      pass
  </code></pre>
  
  <p>And I'm getting this error, but I already have a related_name:</p>
  
  <pre><code>films.personparent: Accessor for field 'from_person' clashes with related field     'Person.from_persons'. Add a related_name argument to the definition for 'from_person'.
  films.personparent: Reverse query name for field 'from_person' clashes with related field    'Person.from_persons'. Add a related_name argument to the definition for 'from_person'.
  films.personparent: Accessor for field 'from_person' clashes with related field 'Person.from_persons'. Add a related_name argument to the definition for 'from_person'.
  films.personparent: Reverse query name for field 'from_person' clashes with related field 'Person.from_persons'. Add a related_name argument to the definition for 'from_person'.
  </code></pre>
  
  <p>Any help would be appreciated.</p>