Hi Benjamin,

It's not possible to extend the query interface to deal with new data types.
You need to provide a method that converts values to datastore
representation so they can be used in queries.

-Nick

On Mon, Apr 12, 2010 at 2:59 PM, Benjamin Hutchins <[email protected]>wrote:

> I have created a custom Property class,
>
> from google.appengine.ext import db
>
> class UserNotFoundError(Exception):
>   pass
>
> class User(object):
>    def __init__(self, user=None, email=None):
>        if user is None and email is not None:
>            user = Users.all().filter('email', db.Email(email)).get()
>
>        if not user:
>            raise UserNotFoundError
>
>        self.__user = user
>        self.__permissions = None
>
>
> class Users(db.Expando):
>   email = EmailProperty()
>
>
> class CustomUserProperty(db.Property):
>    data_type  = User
>
>    # For writing to datastore.
>    def get_value_for_datastore(self, model_instance):
>        # user will be a User object
>        user = super(CustomUserProperty,
> self).get_value_for_datastore(model_instance)
>        if not user:
>            return None
>        return user.user_id()
>
>    # For reading from datastore.
>    def make_value_from_datastore(self, value):
>        if value is None:
>            return None
>
>        return User( user = Users.get( Key( value ) ) )
>
>
> And it works for when I insert and do references, but when I attempt
> to do something like this..
>
>   user = User() # This is for this example, in the code it loads the
> proper User
>   addresses = UserAddress.all().filter('user', user)  # Imagine this
> has being a class extended from db.Model
>
> It throws an error like:
>   BadValueError: Unsupported type for property  : <class 'User'>
>
> Is there a way to make it so when using filter() or other comparisons
> through the db functionality it also converts it to the datastore
> value?
>
> --
> You received this message because you are subscribed to the Google Groups
> "Google App Engine" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected]<google-appengine%[email protected]>
> .
> For more options, visit this group at
> http://groups.google.com/group/google-appengine?hl=en.
>
>


-- 
Nick Johnson, Developer Programs Engineer, App Engine Google Ireland Ltd. ::
Registered in Dublin, Ireland, Registration Number: 368047
Google Ireland Ltd. :: Registered in Dublin, Ireland, Registration Number:
368047

-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en.

Reply via email to