I am using django-mongonengine to use the mongdb database; and I had a question about filtering / searching inside such a structure:
class Shop(Document):
created = DateTimeField(default=datetime.now,verbose_name='date_created')
updated = DateTimeField(default=datetime.now,verbose_name='date_updated')
code = StringField(required=True,unique=True)
socialName = StringField(verbose_name='legal_name')
name = StringField(required=True,verbose_name='shop_name')
address = StringField(required=True,verbose_name='shop_address')
gpsLoc = GeoPointField()
apdo = IntField(default=0)
logo = StringField(verbose_name='url_logo')
listGifts = ListField(EmbeddedDocumentField(Gift))
listOffers = ListField(EmbeddedDocumentField(Offer))
def __unicode__(self):
return u'%s' % (self.name)
@queryset_manager
def objects(doc_cls,queryset):
return queryset.order_by('-shop_name')
class Gifted(EmbeddedDocument):
created = DateTimeField(default=datetime.now,verbose_name='date_created')
gifted = DateTimeField(default=datetime.now,verbose_name='date_gifted')
shop = ReferenceField(Shop,required=True,verbose_name='shop')
gift = EmbeddedDocumentField(Gift,required=True,verbose_name='gift')
def __unicode__(self):
return u'%s' % (self.gift)
@queryset_manager
def objects(doc_cls,queryset):
return queryset.order_by('-date_gifted')
class UserProfile(EmbeddedDocument):
created = DateTimeField(default=datetime.now,verbose_name='date_created')
updated = DateTimeField(default=datetime.now,verbose_name='date_updated')
birthday = DateTimeField(verbose_name='birthday')
gender = BooleanField(default=True,verbose_name='is_man')
rel_status = StringField()
name = StringField(max_length=50,verbose_name='name')
phone = StringField(verbose_name='phone')
points = IntField(default=0,verbose_name='current_points')
listGifts = ListField(EmbeddedDocumentField(Gifted))
listOffers = ListField(EmbeddedDocumentField(Discount))
def __unicode__(self): return self.name
@queryset_manager
def objects(doc_cls,queryset):
return queryset.order_by('update')
class User(Document):
username = EmailField(unique=True,max_length=250,min_length=4,required=True)
password = StringField(max_length=100,required=True)
created = DateTimeField(default=datetime.now,verbose_name='date_created')
code = StringField(required=True,unique=True)
tok_crypt = StringField(verbose_name='token_crypt',required=True)
expired = DateTimeField(verbose_name='date_expired')
last_login = DateTimeField(default=datetime.now, verbose_name='date_last_login')
profile = EmbeddedDocumentField(UserProfile, verbose_name='profile')
def __unicode__(self): return self.username
@queryset_manager
def objects(doc_cls,queryset):
return queryset.order_by('username')
If I want to search for all users who have some gifted items from a special store (Shop.code), how can I filter / search without using for inside, inside for ... etc.
Sort of:
listUsers = User.objects (profile.listGifts__contains = Gifted.objects (shop.code = sCode))
listUsers = User-> Profile-> List (Gifted-> Shop.code = code)
source
share