phoebebright
unread,Oct 3, 2009, 1:03:53 PM10/3/09Sign in to reply to author
Sign in to forward
You do not have permission to delete messages in this group
Sign in to report message
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to Django users
Have spent quite a few hours on this one but not familiar enough with
django inerds to make much progress.
Here is the model:
class Stuff(models.Model):
name = models.CharField(max_length=140)
parent = models.ForeignKey('self', null=True, blank=True,
related_name='children')
mptt.register(Stuff)
class ToDo(Stuff):
status = models.CharField(_('status'), max_length=1,
choices=STATUS_CHOICES, default=1)
class Concept(Stuff):
priority = models.CharField(_('status'), max_length=1,
choices=PRIORITY_CHOICES,
default='C')
And the code where I am saving (tried many different options!)
obj = ToDo(**field_vals)
obj.tags = " ".join(set(self.keyw_used))
obj.save()
# add parent
if self.parent:
obj.move_to(self.parent)
obj.save()
Am getting the error 'Options' object has no attribute 'parent_attr'
when trying to add to ToDo.
Error occurring here:
def is_root_node(self):
return getattr(self, '%s_id' % self._meta.parent_attr) is None
This is because the ToDo model is not in the mptt registery.
I tried adding an attribute to register to say it was inherited so
that the __init__ method of mptt would add the ToDo and Concept models
to the registry but not all the fields. ie.
in models:
mptt.register(Stuff)
mptt.register(ToDo, inherited=True)
mptt.register(Concept, inherited=True)
and hacked __init__:
if model in registry:
raise AlreadyRegistered(
_('The model %s has already been registered.') %
model.__name__)
registry.append(model)
#added by PHB
if not inherited:
# Add tree options to the model's Options
opts = model._meta
opts.parent_attr = parent_attr
opts.right_attr = right_attr
This got me past the first error but it's still putting the mptt
fields in the _meta of the ToDo model and failing in the models
pre_save with:
AttributeError: 'ToDo' object has no attribute 'lft'
I need to find some way of telling django these fields are in the
parent class and not the child. Any suggestions very welcome as way
out of my depth there!