def save(self, *args, **kwargs): """ Sobreescribo el metodo save para que al salvar la instancia, se cargue el field de propiedad con el queryset adecuado """ super(FieldPropiedadForm, self).save(*args, **kwargs) if self.instance.propiedad is None: if isinstance(self.instance, Atributo): queryset = descubre_propiedades(self.instance.modelo.entidad) queryset = queryset.order_by('nombre') self.fields['propiedad']._set_queryset(queryset) else: tipo_modelo_rel = self.instance.modelo_relacionado.entidad queryset = descubre_propiedades(self.instance.modelo.entidad, False) padres = descubre_padres(tipo_modelo_rel) padres.add(tipo_modelo_rel) queryset = queryset.filter(tipo__in=padres) queryset = queryset.order_by('nombre') if queryset.count() == 0: queryset = Propiedad.objects.none() self.fields['propiedad']._set_queryset(queryset)
def devuelve_propiedades_default(request): """ Used with ajax, return the list of properties for a concrete field """ resultado = dict() # If exist data in request.GET if request.method == u'GET': get_data = request.GET if u'field' in get_data: # Get the field field = get_data[u'field'] # Check if is a attribute or a relation if Atributo.objects.filter(pk=field).count() > 0: field = Atributo.objects.get(pk=field) queryset = descubre_propiedades(field.modelo.entidad) else: field = Relacion.objects.get(pk=field) queryset = descubre_propiedades(field.modelo.entidad, False) padres = descubre_padres(field.modelo_relacionado.entidad) padres.add(field.modelo_relacionado.entidad) queryset = queryset.filter(tipo__in=padres) if queryset.count() == 0: queryset = Propiedad.objects.none() #Create a list with the properties availables resultado['return'] = True resultado['lista'] = list() queryset = queryset.order_by('nombre') for elem in queryset: # check if has description if elem.descripcion is None or elem.descripcion == '': subregistro = (str(elem.id), unicode(elem), elem.etiqueta + ': ' + 'Without description') else: subregistro = (str(elem.id), unicode(elem), elem.etiqueta + ': ' + elem.descripcion) resultado['lista'].append(subregistro) # Return the list of properties using json json = simplejson.dumps(resultado) return HttpResponse(json, mimetype='application/json')
def test_descubre_propiedades(self): """ Caso de prueba para el metodo descubre_propiedades """ ent1 = Entidad.objects.get(nombre="father") ent2 = Entidad.objects.get(nombre="son") propiedades_ent1 = descubre_propiedades(ent1) propiedades_ent1_complex = descubre_propiedades(ent1, False) propiedades_ent2 = descubre_propiedades(ent2) propiedades_ent2_complex = descubre_propiedades(ent2, False) self.assertEqual(propiedades_ent1.count(), 2) self.assertEqual(propiedades_ent1_complex.count(), 0) self.assertEqual(propiedades_ent2.count(), 1) self.assertEqual(propiedades_ent2_complex.count(), 1) # Set ent1 as father of ent2 ent2.padres.add(ent1) ent2.save() propiedades_ent2 = descubre_propiedades(ent2) propiedades_ent2_complex = descubre_propiedades(ent2, False) self.assertEqual(propiedades_ent2.count(), 3) self.assertEqual(propiedades_ent2_complex.count(), 1)
def __init__(self, *args, **kwargs): super(FieldPropiedadForm, self).__init__(*args, **kwargs) ent = self.instance.modelo.entidad if not ent is None: self.fields['namespace'].empty_label = ent.namespace.namespace + \ u" : " + ent.nombre self.fields['propiedad'].label = self.instance.nombre name_data = self.data.get(self.prefix + "-namespace", None) prop_data = self.data.get(self.prefix + "-propiedad", None) if not name_data is None: try: name_data = int(name_data) except ValueError: name_data = None if not prop_data is None: try: prop_data = int(prop_data) except ValueError: prop_data = None if isinstance(self.instance, Atributo): if name_data is None: queryset = descubre_propiedades(self.instance.modelo.entidad) if prop_data is None and \ not self.instance.propiedad is None and \ not self.instance.propiedad in queryset: name = self.instance.propiedad.namespace self.fields['namespace'].initial = \ self.instance.propiedad.namespace queryset = name.propiedades.all() queryset = queryset.filter(pk=self.instance.propiedad.pk) else: namespace = NameSpace.objects.get(pk=name_data) queryset = namespace.propiedades.all() if not prop_data is None: queryset = queryset.filter(pk=prop_data) else: # Caso de ser una relacion tipo_modelo_rel = self.instance.modelo_relacionado.entidad if name_data is None: queryset = descubre_propiedades(self.instance.modelo.entidad, False) padres = descubre_padres(tipo_modelo_rel) padres.add(tipo_modelo_rel) queryset = queryset.filter(tipo__in=padres) queryset = queryset.order_by('nombre') if queryset.count() == 0: queryset = Propiedad.objects.none() if prop_data is None and \ not self.instance.propiedad is None and \ not self.instance.propiedad in queryset: name = self.instance.propiedad.namespace self.fields['namespace'].initial = \ self.instance.propiedad.namespace queryset = name.propiedades.all() queryset = queryset.filter(pk=self.instance.propiedad.pk) else: namespace = NameSpace.objects.get(pk=name_data) self.fields['namespace'].initial = namespace queryset = namespace.propiedades.all() if not prop_data is None: queryset = queryset.filter(pk=prop_data) queryset = queryset.order_by('nombre') self.fields['propiedad'].queryset = queryset