def meta_code(model): lines = [] if model.unique_together.all().count(): pairs = [] for item in model.unique_together.all(): fields = ["'%s'" % f.name for f in item.fields.all()] pairs.append('(%s)' % ', '.join(fields)) lines.append('unique_together = (%s,)' % ', '.join(pairs)) if len(lines) == 0: return None code = CodeBlock() meta = code.class_('Meta') meta.extend(lines) return code
def app_models_code(application): code = CodeBlock(['from django.db import models']) code.extend(['', '']) for model in application.model_set.all(): code.extend(model_code(model)) code.extend(['', '']) return '\n'.join(code.lines())
def model_code(model): code = CodeBlock() model_class = code.class_(model.name, ['models.Model']) if model.comments: model_class.append('"""%s"""' % model.comments)#TODO: handle quotes in comments, make it like a method(CommentsCode(CodeBlock)) for field in model.field_set.all(): model_class.append(model_field_code(field)) if model.custom_code: lines = [''] + model.custom_code.split('\n') model_class.extend(lines) meta = meta_code(model) if model.field_set.all().count() == 0 and not model.custom_code and not meta: model_class.append('pass') if meta: model_class.append('') model_class.extend(meta) return code