Django

Code

Show
Ignore:
Timestamp:
06/28/08 21:36:18 (2 months ago)
Author:
mtredinnick
Message:

Fixed handling of multiple fields in a model pointing to the same related model.

Thanks to ElliotM, mk and oyvind for some excellent test cases for this. Fixed #7110, #7125.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/trunk/tests/regressiontests/many_to_one_regress/models.py

    r7574 r7778  
    2727    name = models.CharField(max_length=20) 
    2828    parent = models.ForeignKey(Parent) 
     29 
     30 
     31# Multiple paths to the same model (#7110, #7125) 
     32class Category(models.Model): 
     33    name = models.CharField(max_length=20) 
     34 
     35    def __unicode__(self): 
     36        return self.name 
     37 
     38class Record(models.Model): 
     39    category = models.ForeignKey(Category) 
     40 
     41class 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) 
    2947 
    3048 
     
    7492ValueError: Cannot assign "<First: First object>": "Child.parent" must be a "Parent" instance. 
    7593 
     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 
    76116"""}