| | 29 | |
|---|
| | 30 | |
|---|
| | 31 | # Multiple paths to the same model (#7110, #7125) |
|---|
| | 32 | class Category(models.Model): |
|---|
| | 33 | name = models.CharField(max_length=20) |
|---|
| | 34 | |
|---|
| | 35 | def __unicode__(self): |
|---|
| | 36 | return self.name |
|---|
| | 37 | |
|---|
| | 38 | class Record(models.Model): |
|---|
| | 39 | category = models.ForeignKey(Category) |
|---|
| | 40 | |
|---|
| | 41 | class Relation(models.Model): |
|---|
| | 42 | left = models.ForeignKey(Record, related_name='left_set') |
|---|
| | 43 | right = models.ForeignKey(Record, related_name='right_set') |
|---|
| | 44 | |
|---|
| | 45 | def __unicode__(self): |
|---|
| | 46 | return u"%s - %s" % (self.left.category.name, self.right.category.name) |
|---|
| | 94 | # Test of multiple ForeignKeys to the same model (bug #7125) |
|---|
| | 95 | |
|---|
| | 96 | >>> c1 = Category.objects.create(name='First') |
|---|
| | 97 | >>> c2 = Category.objects.create(name='Second') |
|---|
| | 98 | >>> c3 = Category.objects.create(name='Third') |
|---|
| | 99 | >>> r1 = Record.objects.create(category=c1) |
|---|
| | 100 | >>> r2 = Record.objects.create(category=c1) |
|---|
| | 101 | >>> r3 = Record.objects.create(category=c2) |
|---|
| | 102 | >>> r4 = Record.objects.create(category=c2) |
|---|
| | 103 | >>> r5 = Record.objects.create(category=c3) |
|---|
| | 104 | >>> r = Relation.objects.create(left=r1, right=r2) |
|---|
| | 105 | >>> r = Relation.objects.create(left=r3, right=r4) |
|---|
| | 106 | >>> r = Relation.objects.create(left=r1, right=r3) |
|---|
| | 107 | >>> r = Relation.objects.create(left=r5, right=r2) |
|---|
| | 108 | >>> r = Relation.objects.create(left=r3, right=r2) |
|---|
| | 109 | |
|---|
| | 110 | >>> Relation.objects.filter(left__category__name__in=['First'], right__category__name__in=['Second']) |
|---|
| | 111 | [<Relation: First - Second>] |
|---|
| | 112 | |
|---|
| | 113 | >>> Category.objects.filter(record__left_set__right__category__name='Second').order_by('name') |
|---|
| | 114 | [<Category: First>, <Category: Second>] |
|---|
| | 115 | |
|---|