Python mongoengine.ReferenceField() Examples
The following are 5
code examples of mongoengine.ReferenceField().
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
You may also want to check out all available functions/classes of the module
mongoengine
, or try the search function
.
Example #1
Source File: test_marshmallow_mongoengine.py From marshmallow-mongoengine with MIT License | 6 votes |
def models(): class HeadTeacher(me.EmbeddedDocument): full_name = me.StringField(max_length=255, unique=True, default='noname') class Course(me.Document): id = me.IntField(primary_key=True) name = me.StringField() # These are for better model form testing cost = me.IntField() description = me.StringField() level = me.StringField(choices=('Primary', 'Secondary')) prereqs = me.DictField() started = me.DateTimeField() grade = AnotherIntegerField() students = me.ListField(me.ReferenceField('Student')) class School(me.Document): name = me.StringField() students = me.ListField(me.ReferenceField('Student')) headteacher = me.EmbeddedDocumentField(HeadTeacher) class Student(me.Document): full_name = me.StringField(max_length=255, unique=True, default='noname') age = me.IntField(min_value=10, max_value=99) dob = me.DateTimeField(null=True) date_created = me.DateTimeField(default=dt.datetime.utcnow, help_text='date the student was created') current_school = me.ReferenceField('School') courses = me.ListField(me.ReferenceField('Course')) email = me.EmailField(max_length=100) profile_uri = me.URLField(max_length=200) # So that we can access models with dot-notation, e.g. models.Course class _models(object): def __init__(self): self.HeadTeacher = HeadTeacher self.Course = Course self.School = School self.Student = Student return _models()
Example #2
Source File: fields.py From graphene-mongo with MIT License | 5 votes |
def reference_args(self): def get_reference_field(r, kv): field = kv[1] mongo_field = getattr(self.model, kv[0], None) if isinstance( mongo_field, (mongoengine.LazyReferenceField, mongoengine.ReferenceField), ): field = convert_mongoengine_field(mongo_field, self.registry) if callable(getattr(field, "get_type", None)): _type = field.get_type() if _type: node = _type._type._meta if "id" in node.fields and not issubclass( node.model, (mongoengine.EmbeddedDocument,) ): r.update({kv[0]: node.fields["id"]._type.of_type()}) return r return reduce(get_reference_field, self.fields.items(), {})
Example #3
Source File: converter.py From graphene-mongo with MIT License | 5 votes |
def convert_field_to_list(field, registry=None): base_type = convert_mongoengine_field(field.field, registry=registry) if isinstance(base_type, graphene.Field): return graphene.List( base_type._type, description=get_field_description(field, registry), required=field.required ) if isinstance(base_type, (graphene.Dynamic)): base_type = base_type.get_type() if base_type is None: return base_type = base_type._type if graphene.is_node(base_type): return base_type._meta.connection_field_class(base_type) # Non-relationship field relations = (mongoengine.ReferenceField, mongoengine.EmbeddedDocumentField) if not isinstance(base_type, (graphene.List, graphene.NonNull)) and not isinstance( field.field, relations ): base_type = type(base_type) return graphene.List( base_type, description=get_field_description(field, registry), required=field.required, )
Example #4
Source File: converter.py From graphene-mongo with MIT License | 5 votes |
def convert_field_to_union(field, registry=None): _types = [] for choice in field.choices: if isinstance(field, mongoengine.GenericReferenceField): _field = mongoengine.ReferenceField(get_document(choice)) elif isinstance(field, mongoengine.GenericEmbeddedDocumentField): _field = mongoengine.EmbeddedDocumentField(choice) _field = convert_mongoengine_field(_field, registry) _type = _field.get_type() if _type: _types.append(_type.type) else: # TODO: Register type auto-matically here. pass if len(_types) == 0: return None # XXX: Use uuid to avoid duplicate name name = "{}_{}_union_{}".format( field._owner_document.__name__, field.db_field, str(uuid.uuid1()).replace("-", ""), ) Meta = type("Meta", (object,), {"types": tuple(_types)}) _union = type(name, (graphene.Union,), {"Meta": Meta}) return graphene.Field(_union)
Example #5
Source File: test_fields.py From marshmallow-mongoengine with MIT License | 4 votes |
def test_ReferenceField(self): class ReferenceDoc(me.Document): field = me.IntField(primary_key=True, default=42) class Doc(me.Document): id = me.StringField(primary_key=True, default='main') ref = me.ReferenceField(ReferenceDoc) fields_ = fields_for_model(Doc) assert type(fields_['ref']) is fields.Reference class DocSchema(ModelSchema): class Meta: model = Doc ref_doc = ReferenceDoc().save() doc = Doc(ref=ref_doc) dump = DocSchema().dump(doc) assert not dump.errors assert dump.data == {'ref': 42, 'id': 'main'} # Try the same with reference document type passed as string class DocSchemaRefAsString(Schema): id = fields.String() ref = fields.Reference('ReferenceDoc') dump = DocSchemaRefAsString().dump(doc) assert not dump.errors assert dump.data == {'ref': 42, 'id': 'main'} # Test the field loading load = DocSchemaRefAsString().load(dump.data) assert not load.errors assert type(load.data['ref']) == ReferenceDoc # Try invalid loads for bad_ref in (1, 'NaN', None): dump.data['ref'] = bad_ref _, errors = DocSchemaRefAsString().load(dump.data) assert errors, bad_ref