from django.shortcuts import render, HttpResponse, HttpResponseRedirect
from django.contrib import admin
from django.db import models
# bfields = dict(
# name=models.CharField(max_length=100),
# authors=models.ManyToManyField(to='a', related_name='author')
# )
# afields=dict(title= models.CharField(choices=[('MR', 'Mr.'),
# ('MRS', 'Mrs.'),
# ('MS', 'Ms.')], max_length=3),
# birth_date= models.DateField(blank=True, null=True)
# )
from django.db import connection, migrations, models
from django.db.migrations.executor import MigrationExecutor
def create_table(table_name, model_fields, app_label):
class Migration(migrations.Migration):
initial = True
dependencies = []
operations = [
migrations.CreateModel(
name='a',
fields=[
('title', models.CharField(choices=[('MR', 'Mr.'), ('MRS', 'Mrs.'), ('MS', 'Ms.')], max_length=3)),
('birth_date', models.DateField(blank=True, null=True)),
],
),
migrations.CreateModel(
name='b',
fields=[
('id', models.AutoField(auto_created=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=100)),
('authors', models.ManyToManyField(to='a', related_name='author')),
],
),
migrations.CreateModel(
name='c',
fields=[
('id', models.AutoField(auto_created=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=32)),
('data', models.CharField(db_index=True, max_length=32)),
],
),
]
executor = MigrationExecutor(connection)
migration = Migration(table_name, app_label)
with connection.schema_editor(atomic=True) as schema_editor:
migration.apply(executor._create_project_state(), schema_editor)
def get_model(name, fields=None, app_label=None, module='', options=None, admin_opts=None):
"""
Create specified model
"""
class Meta:
db_table = name # 这里和法1不同
# pass
if app_label:
setattr(Meta, 'app_label', app_label)
if options is not None:
for key, value in options.items():
setattr(Meta, key, value)
attrs = {'__module__': module, 'Meta': Meta}
if fields:
attrs.update(fields)
model = type(name, (models.Model,), attrs)
return model
def tests(requests):
# custom_model = create_table('example', fields,
# app_label='app',
# )
afields = dict(title=models.CharField(choices=[('MR', 'Mr.'),
('MRS', 'Mrs.'),
('MS', 'Ms.')], max_length=3),
birth_date=models.DateField(blank=True, null=True)
)
a_m = get_model('app01_a', app_label='app01', fields=afields) # 参数1和法1不同
bfields = dict(
name=models.CharField(max_length=100),
authors=a_m # 这里和法1不同
)
model = get_model('app01_b', app_label='app01', fields=bfields) # 参数1和法1不同
# a_obj = obj.objects.get(id=1)
print(model.objects.values('name'))
obj = model.objects.filter(id=1).first()
# a = obj
a = obj.authors.objects.all() # 参数1和法1不同
print(a)
return HttpResponse(a)