| 1 | #!/usr/bin/env python
|
|---|
| 2 | import os
|
|---|
| 3 | import sys
|
|---|
| 4 | from optparse import OptionParser
|
|---|
| 5 |
|
|---|
| 6 | INDENTCOUNT = 4
|
|---|
| 7 | INDENTCHAR = ' '
|
|---|
| 8 |
|
|---|
| 9 | parser = OptionParser()
|
|---|
| 10 | parser.add_option('-a', '--app', dest='app', help='The app which contains the model.')
|
|---|
| 11 | parser.add_option('-m', '--model', dest='model', help='The model to produce the Form for.')
|
|---|
| 12 | parser.add_option('-p', '--path', dest='path', help='The path to look for the files, directories separated by space.')
|
|---|
| 13 | parser.add_option('-w', '--write', dest='file', help='The output file to append the form to, without this argument the output is printed.')
|
|---|
| 14 |
|
|---|
| 15 | options, args = parser.parse_args()
|
|---|
| 16 |
|
|---|
| 17 | if not(options.model and options.app):
|
|---|
| 18 | parser.print_help()
|
|---|
| 19 | sys.exit()
|
|---|
| 20 |
|
|---|
| 21 | if options.path:
|
|---|
| 22 | sys.path += options.path.split()
|
|---|
| 23 |
|
|---|
| 24 | if options.file:
|
|---|
| 25 | sys.stdout = file(options.file, 'a')
|
|---|
| 26 |
|
|---|
| 27 | try:
|
|---|
| 28 | if 'DJANGO_SETTINGS_MODULE' in os.environ:
|
|---|
| 29 | settings = __import__(os.environ['DJANGO_SETTINGS_MODULE'])
|
|---|
| 30 | else:
|
|---|
| 31 | import settings
|
|---|
| 32 | except ImportError:
|
|---|
| 33 | print 'Settings file not found. Place this file in the same dir as manage.py or use the path argument.'
|
|---|
| 34 | sys.exit()
|
|---|
| 35 |
|
|---|
| 36 | project_directory = os.path.dirname(settings.__file__)
|
|---|
| 37 | project_name = os.path.basename(project_directory)
|
|---|
| 38 |
|
|---|
| 39 | sys.path.append(os.path.join(project_directory, '..'))
|
|---|
| 40 | project_module = __import__(project_name)
|
|---|
| 41 | os.environ['DJANGO_SETTINGS_MODULE'] = '%s.settings' % project_name
|
|---|
| 42 | from django.newforms import form_for_model
|
|---|
| 43 |
|
|---|
| 44 | models = __import__('%s.%s.models' % (project_name, options.app,), '', '', [options.model])
|
|---|
| 45 | model = getattr(models, options.model)
|
|---|
| 46 |
|
|---|
| 47 | fields = model._meta.fields + model._meta.many_to_many
|
|---|
| 48 |
|
|---|
| 49 | print 'class %sForm(forms.Form):' % (options.model)
|
|---|
| 50 | for field in fields:
|
|---|
| 51 | formfield = field.formfield()
|
|---|
| 52 | if formfield:
|
|---|
| 53 | fieldtype = str(formfield).split()[0].split('.')[-1]
|
|---|
| 54 | arguments = {}
|
|---|
| 55 | arguments['verbose_name'] = '\'%s\'' % field.verbose_name
|
|---|
| 56 | arguments['help_text'] = '\'%s\'' % field.help_text
|
|---|
| 57 | arguments['required'] = not field.blank
|
|---|
| 58 |
|
|---|
| 59 | print '%s%s = forms.%s(%s)' % (INDENTCOUNT * INDENTCHAR, field.name, fieldtype, ', '.join(['%s=%s' % (k, v) for k, v in arguments.iteritems()]))
|
|---|
| 60 |
|
|---|