Re: adding custom variables to the Meta class

2010-01-05 Thread Jani Tiainen
On Tue, 2010-01-05 at 04:17 -0800, bruno desthuilliers wrote:
> 
> On 5 jan, 00:05, HARRY POTTRER  wrote:
> > I have an class that I created which takes a queryset, and a field on
> > the model that the queryset represents. Like this:
> >
> > mc = MyClass(queryset=MyModel.objects.all(), lat_lng_field='lat_lng')
> >
> > The class basically filters the queryset based on some geographical
> > values, but in order to do that, it needs to know which field the
> > coordinates are stored in.
> >
> > Right now I have no choice but require you to pass in a string
> > representing the field name. But I think a better way would be to do
> > it kind of like this:
> >
> > class MyModel(models.Model):
> > lat_lng = PointField()
> > name = CharFIeld(max_length=20)
> >
> > class Meta:
> > verbose_name_plural = 'My Models'
> > lat_lng_field = 'lat_lng'
> >
> > Then just modify MyClass to get the field name from the Model's Meta
> > class. Is this possible somehow?
> 
> Did you at least try ? It took me about 5 seconds to find out it
> wouldn't work... or at least not without a very ugly monkeypatch.
> 
> 
> > If not, whats the best way to go
> > about this without having to pass in the field name directly?
> 
> You can
> 
> 1/ store the info as a class attribute
> 
> class MyModel(models.Model):
> lat_lng_field = 'lat_lng'
> 
> # etc
> 
> 2/ store all "geographic" related infos in another inner class in your
> models (not worth if you only have a single info...)
> 
> 3/ add the attribute _after_ the class statement's body, ie:
> 
> 
> class MyModel(models.Model):
># stuff here
> 
> MyModel._meta.lat_lng_field = 'lat_lng'
> 
> 
> 4/ monkeypatch django.db.models.options to allow "lat_lng_field" in
> Meta (very bad idea IMHO)
> 
> or simply:
> 
> 5/ document the fact that the 'lat_lng' field name MUST be named
> 'lat_lng', period !-)
> 
> 
> My 2 cents...
> 

Or... :)

from django.db import models

models.options.DEFAULT_NAMES += ('my_first_val', 'my_second_val')

class MyModel(models.Model):
class Meta:
my_first_val = 'foo'
my_second_val = 'bar'


Amazing, isn't it?

-- 

Jani Tiainen



--

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.




Re: adding custom variables to the Meta class

2010-01-05 Thread bruno desthuilliers


On 5 jan, 00:05, HARRY POTTRER  wrote:
> I have an class that I created which takes a queryset, and a field on
> the model that the queryset represents. Like this:
>
> mc = MyClass(queryset=MyModel.objects.all(), lat_lng_field='lat_lng')
>
> The class basically filters the queryset based on some geographical
> values, but in order to do that, it needs to know which field the
> coordinates are stored in.
>
> Right now I have no choice but require you to pass in a string
> representing the field name. But I think a better way would be to do
> it kind of like this:
>
> class MyModel(models.Model):
>     lat_lng = PointField()
>     name = CharFIeld(max_length=20)
>
>     class Meta:
>         verbose_name_plural = 'My Models'
>         lat_lng_field = 'lat_lng'
>
> Then just modify MyClass to get the field name from the Model's Meta
> class. Is this possible somehow?

Did you at least try ? It took me about 5 seconds to find out it
wouldn't work... or at least not without a very ugly monkeypatch.


> If not, whats the best way to go
> about this without having to pass in the field name directly?

You can

1/ store the info as a class attribute

class MyModel(models.Model):
lat_lng_field = 'lat_lng'

# etc

2/ store all "geographic" related infos in another inner class in your
models (not worth if you only have a single info...)

3/ add the attribute _after_ the class statement's body, ie:


class MyModel(models.Model):
   # stuff here

MyModel._meta.lat_lng_field = 'lat_lng'


4/ monkeypatch django.db.models.options to allow "lat_lng_field" in
Meta (very bad idea IMHO)

or simply:

5/ document the fact that the 'lat_lng' field name MUST be named
'lat_lng', period !-)


My 2 cents...

--

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.




adding custom variables to the Meta class

2010-01-04 Thread HARRY POTTRER
I have an class that I created which takes a queryset, and a field on
the model that the queryset represents. Like this:

mc = MyClass(queryset=MyModel.objects.all(), lat_lng_field='lat_lng')

The class basically filters the queryset based on some geographical
values, but in order to do that, it needs to know which field the
coordinates are stored in.

Right now I have no choice but require you to pass in a string
representing the field name. But I think a better way would be to do
it kind of like this:

class MyModel(models.Model):
lat_lng = PointField()
name = CharFIeld(max_length=20)

class Meta:
verbose_name_plural = 'My Models'
lat_lng_field = 'lat_lng'

Then just modify MyClass to get the field name from the Model's Meta
class. Is this possible somehow? If not, whats the best way to go
about this without having to pass in the field name directly?

--

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.