Dear Dave,
First of all, apologies for the very late reply. Your patch (Version 2.28b) worked like a charm. It helped us fixing the float issues while building Django models. Following up on one of the concerns raised by us earlier, we have built a generic parser that converts the XML data to create Django model objects and load it into the DB. We do this by using the python and Django models generated by the generateDS library. As far now it seems to be working fine, but we do have few concerns with the current logic that generated the Django models from the XSD. They are listed below, please do validate them and let us know if those changes would be required in the current genDS or if we are handing it in an incorrect way. *Choices:* For instance, consider the below example: *<xs:complexType name="contact"> <xs:choice> <xs:element name="home" type="xs:positiveInteger"/> <xs:element name="office" type="xs:nonNegativeInteger"/> </xs:choice> </xs:complexType>* As of now genDS creates the below equivalent class: *class contact* * (models.Model): home = models.IntegerField() office = models.IntegerField()* As per the above class structure it expects both home and office parameters, but it should be *class contact* * (models.Model): home = models.IntegerField(null=True) office = models.IntegerField(null=True)* Since we validate the XML against the XSD before parsing them using generate DS models, we could very well accept null for all the choices. In this way, we are already aware that either of one choice is already present in XML when it is validated. *Substitution:* Referring to the attached XSDs and model. Our concern with the current behaviour (current_model.py) is when a validated XML has an email_contact or a mobile_contact reference under the contact list the system would throw a type error while trying to parse and save the data from XML since, it expects only contact_type as the object reference. But as per the substitution in XSD the contact type of contact list can be email_contact object or mobile_contact object. So what we propose in the proposed_model.py is to use Generics in these instances. By using ‘ContentType’ and ‘GenericForeignKey’ we could get rid of type errors while parsing the XML to Django objects meanwhile handling the XSD substitution as well. *Null Boolean:* Current genDS handles null Boolean like below but Django throws error while migrating those fields: *sample_django_parameter = models.BooleanField(blank=True, null=True)* Error: “booleanFields do not accept null values.: Use a NullBooleanField instead.” On correcting the above to NullBooleanField seems to work. *sample_django_parameter = models.* *NullBooleanField (blank=True, null=True)* Please check and let us know your views on these concerns and once we have this addressed we could proceed and test our generic parser and share the same with you. This could save a lot of time for others who are trying to do the same. Thanks Sriram S On Wed, Aug 23, 2017 at 1:00 AM, Dave Kuhlman <dkuhl...@davekuhlman.org> wrote: > Oops. The version number in the body of that message is wrong. Should > be 2.28b. I apologize I confused anyone. > > Dave > > > On Tue, Aug 22, 2017 at 01:49:18PM -0700, Dave Kuhlman wrote: > > There is a new version of generateDS.py -- version 2.27a. > > > > This release contains several changes for the generation of Django > > models and forms, in particular, (1) a fix for generation of floats and > > (2) the addition of the ability to suppress the generation of model and > > form class name suffixes ("_model" and "_form"). Thanks to Sriram > > Sundar for reporting and suggesting those. > > > > See the notes below from the README for more details. > > > > You can find it here: > > > > - Python Package Index -- http://pypi.python.org/pypi/generateDS/ > > - Source Forge -- http://sourceforge.net/projects/generateds/ > > - Bitbucket -- For those of you who prefer using Mercurial, there is > > also a Mercurial repository at Bitbucket: > > https://bitbucket.org/dkuhlman/generateds > > > > If you have comments, suggestions, or problems, please send them > > along. The email list is here: > > https://lists.sourceforge.net/lists/listinfo/generateds-users > > > > Dave > > > > # ========================================================= > > > > Version 2.28b (08/22/2017) > > > > - Fix for Django models and forms generation -- "float" data type > > was being mapped and was not treated as a simple data type. > > Thanks to Sriram Sundar for catching and reporting this. > > - Sriram also requested that in the Django models and forms > > generation, we be able to omit the "_model" and "_form" suffix on > > generated class names. There is now a "--no-class-suffixes" > > command line option accepted by both gends_run_gen_django.py > > and gends_generate_django.py to do that. Thanks to Sriram for > > this suggestion. > > - Added Python version to the information in the comments at the top > > of generated modules. > > > > # ========================================================= > > > > -- > > > > Dave Kuhlman > > http://www.davekuhlman.org > > > > ------------------------------------------------------------ > ------------------ > > Check out the vibrant tech community on one of the world's most > > engaging tech sites, Slashdot.org! http://sdm.link/slashdot > > _______________________________________________ > > generateds-users mailing list > > generateds-users@lists.sourceforge.net > > https://lists.sourceforge.net/lists/listinfo/generateds-users > > -- > > Dave Kuhlman > http://www.davekuhlman.org > > ------------------------------------------------------------ > ------------------ > Check out the vibrant tech community on one of the world's most > engaging tech sites, Slashdot.org! http://sdm.link/slashdot > _______________________________________________ > generateds-users mailing list > generateds-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/generateds-users >
subst-contact.xsd
Description: Binary data
from django.db import models class base_contact_type_model(models.Model): name = models.CharField(max_length=1000, ) details = models.CharField(max_length=1000, ) def __unicode__(self): return "id: %s" % (self.id, ) class contact_list_model(models.Model): contact = models.ForeignKey( "base_contact_type_model", related_name="contact_list_contact_base_contact_type", ) def __unicode__(self): return "id: %s" % (self.id, ) class email_contact_type_model(models.Model): base_contact_type = models.ForeignKey("base_contact_type_model") email = models.CharField(max_length=1000, ) def __unicode__(self): return "id: %s" % (self.id, ) class mobile_contact_type_model(models.Model): country = models.CharField(max_length=1000, ) number = models.IntegerField() def __unicode__(self): return "id: %s" % (self.id, )
from django.db import models from django.contrib.contenttypes.fields import GenericForeignKey from django.contrib.contenttypes.models import ContentType class base_contact_type_model(models.Model): name = models.CharField(max_length=1000, ) details = models.CharField(max_length=1000, ) def __unicode__(self): return "id: %s" % (self.id, ) class contact_list_model(models.Model): contact = models.ForeignKey(ContentType, on_delete=models.CASCADE) object_id = models.PositiveIntegerField() specimen_preparation = GenericForeignKey('content_type', 'object_id') def __unicode__(self): return "id: %s" % (self.id, ) class email_contact_type_model(models.Model): base_contact_type = models.ForeignKey("base_contact_type_model") email = models.CharField(max_length=1000, ) def __unicode__(self): return "id: %s" % (self.id, ) class mobile_contact_type_model(models.Model): country = models.CharField(max_length=1000, ) number = models.IntegerField() def __unicode__(self): return "id: %s" % (self.id, )
------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________ generateds-users mailing list generateds-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/generateds-users