Skip to content

Commit 8801fb3

Browse files
authored
Merge pull request #166 from netzkolchose/fix_165
fix related_name vs related_query_name issue
2 parents b53490b + 790cdb4 commit 8801fb3

File tree

3 files changed

+33
-3
lines changed

3 files changed

+33
-3
lines changed

computedfields/graph.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -557,9 +557,7 @@ def resolve_dependencies(
557557
# handle reverse relation (not a concrete field)
558558
descriptor = getattr(cls, symbol)
559559
rel = getattr(descriptor, 'rel', None) or getattr(descriptor, 'related')
560-
symbol = rel.related_name \
561-
or rel.related_query_name \
562-
or rel.related_model._meta.model_name
560+
symbol = rel.field.related_query_name()
563561
# add dependency to reverse relation field as well
564562
# this needs to be added in opposite direction on related model
565563
path_segments.append(symbol)

example/test_full/models.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1107,3 +1107,18 @@ class Meta:
11071107
class HaProxy(Ha):
11081108
class Meta:
11091109
proxy = True
1110+
1111+
1112+
# related_name vs. related_query_name issue #165
1113+
class RNFoo(ComputedFieldsModel):
1114+
@computed(models.CharField(max_length=256), depends=[('bars', ['b'])])
1115+
def comp(self):
1116+
s = ''
1117+
if self.pk:
1118+
for bar in self.bars.all().order_by('pk'):
1119+
s += bar.b
1120+
return s
1121+
1122+
class RNBar(models.Model):
1123+
b = models.CharField(max_length=10)
1124+
foo = models.ForeignKey(RNFoo, related_name='bars', related_query_name='bar', on_delete=models.CASCADE)
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
from django.test import TestCase
2+
from ..models import RNBar, RNFoo
3+
4+
5+
class RelatedName(TestCase):
6+
def setUp(self):
7+
self.foo = RNFoo.objects.create()
8+
self.bar = RNBar.objects.create(b='a', foo=self.foo)
9+
10+
def test_init(self):
11+
self.foo.refresh_from_db()
12+
self.assertEqual(self.foo.comp, 'a')
13+
14+
def test_add_second(self):
15+
bar = RNBar.objects.create(b='b', foo=self.foo)
16+
self.foo.refresh_from_db()
17+
self.assertEqual(self.foo.comp, 'ab')

0 commit comments

Comments
 (0)