I can't promise that it will do what you want, but your problem is
that at the time
you try to set the value of Meta.ordering, class Substrate does not yet exist.
You can dig into the Substrate.objects._meta later to add ordering, probably.

Your design wouldn't have worked anyway, since getLanguage would only
have been called once, at import time, and even if that worked, it wouldn't
follow current language as it changes (I presume) from request to request.

Oh, and since you're not calling getLanguage on a class instance, it would
have to be declared a staticmethod or classmethod, and not get the self
argument or replace it with cls (for classmethod).  Static method would be
the choice here (and no self)

It's mildly possible that ordering is allowed to be a callable.  If
so, you could
assign it to a function (not a method of the not yet defined Substrate).  That's
the function itself, no parentheses.  The function would return the list.

If ordering can't be a callable, you could create a class that implements enough
of list behavior to satisfy the framework (a subject for research or
experimentation,
but iteration might be enough) and set ordering to an instance, whose apparent
content depends on the current language.

It still might not work, if the __metaclass__ processes Meta.ordering at clas
definition time.  You have the source code.

Bill


On Fri, Dec 18, 2009 at 6:07 AM, Kevin Renskers <i...@bolhoed.net> wrote:
> Hi,
>
> I am having a bit of a problem. I have a model with 3 name fields,
> each for a different language. By creating an __unicode__ function
> like below, I always get the correct name for the current language.
> Works fine.
>
> But, I want to change the default ordering for this model, so that in
> each language, the correct order is used. Sadly, this doesn't work, as
> I get the error "NameError: name 'Substrate' is not defined". Also
> "self" and "super" don't seem to work. I just can't seem to be able to
> access the parent class from within the Meta class.
>
> I can't even repeat the getLanguage function into the Meta class,
> because then I get an the error "TypeError: 'class Meta' got invalid
> attribute(s): getLanguage".
>
> class Substrate(models.Model):
>    name_en = models.CharField(max_length=255)
>    name_de = models.CharField(max_length=255, blank=True)
>    name_nl = models.CharField(max_length=255, blank=True)
>
>    def getLanguage(self):
>        from django.utils import translation
>        current_language = translation.get_language()
>        if not current_language:
>            current_language = 'en'
>        return current_language
>
>    def getName(self):
>        current_language = self.getLanguage()
>        name = getattr(self, 'name_'+current_language, self.name_en)
>        if not name:
>            name = self.name_en
>
>        return name
>
>    def __unicode__(self):
>        return self.getName()
>
>    class Meta:
>        ordering = [('name_%s' % Substrate.getLanguage()), 'name_en']
>
>
>
> If anyone has an idea how on to do this, I would be very happy.
> Thanks!
>
> Cheers,
> Kevin
>
> --
>
> You received this message because you are subscribed to the Google Groups 
> "Django users" group.
> To post to this group, send email to django-us...@googlegroups.com.
> To unsubscribe from this group, send email to 
> django-users+unsubscr...@googlegroups.com.
> For more options, visit this group at 
> http://groups.google.com/group/django-users?hl=en.
>
>
>

--

You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-us...@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.


Reply via email to