我是新来的Django,我开始做一个项目,包括创建一个基于csv文件的动态表。该程序必须管理列的添加和删除。动态Django模型表x不存在
我面临的一个问题是,该表不存在,我不明白为什么......我想这是一个基本问题。 (1146, “表X不存在”)
CSV文件被加载:在此创建 蟒/ views.py
def gestionTable(request) :
if (request.method == 'POST' and request.FILES['file']) :
if (handle_uploaded_file(request.FILES['file'], request.POST['table'])) :
messages.success(request, 'ok')
else :
messages.error(request, _("failed"))
return HttpResponseRedirect('#')
return render(request, 'weather/gestion_table.html')
型号: 的Python
def csv_to_model(f, tableName):
reader = csv.reader(f, delimiter=";")
data_list = list(reader)
col_names = data_list[0]
first_values = data_list[1]
fields = {}
for i in range(len(col_names)) :
try :
fields[col_names[i]] = typeDeduce(type(literal_eval(first_values[i])).__name__)
print(typeDeduce(type(literal_eval(first_values[i])).__name__))
except ValueError:
fields[col_names[i]] = typeDeduce("str")
return create_model(name=str(tableName), fields=fields, app_label="weather", module="weather")
def typeDeduce(a):
if (a == "int") :
return models.IntegerField()
if (a == "float") :
return models.FloatField()
if (a == "str") :
return models.CharField()
动态型号工厂: Python
def create_model(name, fields=None, app_label='', module='', options=None, admin_opts=None):
class Meta:
pass
if app_label:
setattr(Meta, 'app_label', app_label)
if options is not None:
for key, value in options.iteritems():
setattr(Meta, key, value)
attrs = {'__module__': module, 'Meta': Meta}
if fields:
attrs.update(fields)
model = type(name, (models.Model,), attrs)
if admin_opts is not None:
class Admin(admin.ModelAdmin):
pass
for key, value in admin_opts:
setattr(Admin, key, value)
admin.site.register(model, Admin)
return model
履行表: Python的
def fulfillTable(f, model, tableName):
reader = csv.reader(f, delimiter=";")
data_list = list(reader)
col_names = data_list[0]
fieldsList = model._meta.get_fields()
print(fieldsList)
values = {}
for row in data_list[1:] :
for i in range(len(col_names)) :
try :
values[col_names[i]] = literal_eval(row[i])
except ValueError :
values[col_names[i]] = row[i]
model.objects.update_or_create(values) ERROR
谢谢,让我们给一试!我如何知道我的模型已准备好? ^^' – Madostrich
@Madostrich“ready”我的意思是已经存在,由您的工厂创建。如果它在'AppConfig.ready()'之前存在,很可能它不会,因为我看到'request'参数... – Art
是的,它不。我尝试了management.call_command(“makemigrations”,[“yourappname”])management.call_command(“migrate”,[“yourappname”]),似乎我的服务器不明白... – Madostrich