Sriram,
Thanks for the nudge.
See comments below about NullBooleanField. Here is a patch:
diff -r 03b4b58f0ea5 django/generatedssuper.py
--- a/django/generatedssuper.py Tue Nov 28 09:38:16 2017 -0800
+++ b/django/generatedssuper.py Wed Nov 29 14:45:00 2017 -0800
@@ -218,9 +218,9 @@
wrtforms(' %s = forms.TimeField(%s)\n' % (
name, options, ))
elif data_type in Boolean_type_table:
- wrtmodels(' %s = models.BooleanField(%s)\n' % (
+ wrtmodels(' %s = models.NullBooleanField(%s)\n'
% (
name, options, ))
- wrtforms(' %s = forms.BooleanField(%s)\n' % (
+ wrtforms(' %s = forms.NullBooleanField(%s)\n' %
(
name, options, ))
elif data_type in String_type_table:
wrtmodels(
I'll look into the other issues tomorrow. See comments below about
the substitutionGroup issue.
Dave
On Mon, Nov 27, 2017 at 04:54:21PM +0000, Sriram Sundar wrote:
> Dear Dave,
>
> Could you please look into the below request and let us know your views on
> the same when you find time?
>
> Thanks
> Sriram S
>
> On Tue, Oct 3, 2017 at 3:58 PM, Sriram Sundar <[email protected]> wrote:
>
> > 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.
This seems a bit complex. I need to figure out what features in the XML schema
trigger this behavior. Do we generate the code with ContentType and
GenericForeignKey whenever we see an xs:complexType that contains an
element defined as a substitutionGroup? In other words, if we have:
<xs:complexType name="Atype">
...
<xs:element ref="group1" />
...
</xs:complexType>
and we have an element:
<xs:element name="field1" substitutionGroup="group1" type="Atype" />
then do we generate this new code?
I'll do some studying on this.
> >
> >
> >
> > *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)*
This one I believe I can fix. As you suggest, when it's a boolean
type, we'll generate a NullBooleanField rather than a BooleanField.
Question 1: What if this boolean element has minOccurs greater than
0, that is, it is not optional. Do we still want to generate a
NullBooleanField?
Question 2: I also changed the generation of the forms to
NullBooleanField. Is that what we want? I notice in the Django
documentation that one difference is that NullBooleanField does *no*
validation. See:
https://docs.djangoproject.com/en/1.11/ref/forms/fields/#nullbooleanfield
> >
> >
> >
> > 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 <[email protected]>
> > 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
> >> > [email protected]
> >> > 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
> >> [email protected]
> >> 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
[email protected]
https://lists.sourceforge.net/lists/listinfo/generateds-users