On 11 April 2013 16:19, Lachlan Musicman <[email protected]> wrote:
> Hi,
>
> I'm trying to implement a simple family tree type structure. I'm
> expanding on this example code base:
>
> https://github.com/mieows/familytree-django/blob/master/models.py
>
> (please ignore any errors in that models.py, I've addressed many of them)
>
> Ok, simply I have:
>
> class Account(models.Model)
Gah, sorry.
class Account(models.Model):
user = models.OneToOneField(User, blank=True, null=True)
first_name = models.CharField(max_length=60)
last_name = models.CharField(max_length=60)
# Relations
parents = models.ManyToManyField("self", related_name='p',
verbose_name="Parents", null=True, blank=True)
siblings = models.ManyToManyField("self", related_name='s',
verbose_name="Siblings", null=True, blank=True)
partners = models.ManyToManyField("self", related_name='ps',
verbose_name="Partners", null=True, blank=True)
children = models.ManyToManyField("self", related_name='c',
verbose_name="Children", null=True, blank=True)
So, in Relations we have two type of relationships, symmetrical and
non symmetrical.
ie:
parents<->children is non symmetrical
partners<->partner is symmetrical
siblings<->siblings is symmetrical
Here's where the confusion comes in. As per the original code base I
have used the m2m_changed to make sure the adjustments are reflected.
With the Parent<->children this has worked as I expected (
jack.parents.add(jill) also reflects that jack is in
jill.children.all() )
But with the other two relationships, the m2m_changed are not working.
Since both testing and m2m_changed/signals are new to me, my brain is
melting a little.
1. a) Should I explicitly have symmetrical=FALSE in the
parents/children relationships? ie:
parents = models.ManyToManyField("self", symmetrical=FALSE,
related_name='p', verbose_name="Parents", null=True, blank=True)
siblings = models.ManyToManyField("self", symmetrical=FALSE,
related_name='s', verbose_name="Siblings", null=True, blank=True)
1. b) what effect would that have? At the moment I have tables on the database:
account_account
account_account_parents
account_account_children
account_account_partners
account_account_siblings
2. I am trying to test the reflected removals of partners and siblings
and the tests are failing. So I moved to the shell, and I'm seeing
this:
>>> bob = Account(first_name="bob",last_name="sanders",gender='M')
>>> sarah = Account(first_name="sarah",last_name="sanders",gender='F')
>>> bob.siblings.add(sarah)
Traceback (most recent call last):
File "<console>", line 1, in <module>
File
"/home/datakid/.virtualenvs/kids/local/lib/python2.7/site-packages/django/db/models/fields/related.py",
line 897, in __get__
through=self.field.rel.through,
File
"/home/datakid/.virtualenvs/kids/local/lib/python2.7/site-packages/django/db/models/fields/related.py",
line 586, in __init__
(instance, source_field_name))
ValueError: "<Account: bob sanders>" needs to have a value for field
"from_account" before this many-to-many relationship can be used.
>>>
That's where my mind went to jelly. I can see that the error message
contains a generated string - "from_account" - but I don't see
anything in the docs that would talk about from_CLASS settings.
What am I doing wrong? Is it that I've not added the + to
related_name? Is it that I've using m2m_changed on a symmetrical
relationship (I've just commented out the m2m_changed sibling code and
tried again, but it fails with the same message).
Confused.
cheers
L.
--
The new creativity is pointing, not making. Likewise, in the future,
the best writers will be the best information managers.
http://www.theawl.com/2013/02/an-interview-with-avant-garde-poet-kenneth-goldsmith
--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/django-users?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.