django-computedfields
django-computedfields copied to clipboard
M2M through
i'm in the case of computed field depending on fields on a model on the otherside of M2M relation and also of fields in intermediate model. (I have followed the documentation example)
updates are ok in all cases i tested except when doing: person.groups.add(group)
Meanwhile person.groups.remove(group) works.
( I suspect delete signal to be triggered in the case of remove but nothing other than m2m signal in the case of add )
any elegant solution to handle that without adding groups in depends (which trigger more updates than necessary) ?
excerpt from doc example for reference:
class Person(ComputedFieldsModel):
name = models.CharField(max_length=32)
@computed(models.CharField(max_length=256),
depends=[
('memberships', ['joined_at']),
('memberships.group', ['name']) # replaces groups.name dep
],
prefetch_related=['memberships__group']
)
def groupjoins(self):
if not self.pk:
return ''
names = []
for membership in self.memberships.all(): # not using groups anymore
names.append('{}: joined at {}'.format(
membership.group.name, membership.joined_at))
return ','.join(names)
class Group(models.Model):
name = models.CharField(max_length=32)
members = models.ManyToManyField(Person, related_name='groups', through='Membership')
class Membership(models.Model):
person = models.ForeignKey(Person, related_name='memberships')
group = models.ForeignKey(Group, related_name='memberships')
joined_at = SomeDateField(...)