Python django变体在django管理中创建模型

Python django变体在django管理中创建模型,python,django,dynamic,django-models,models,Python,Django,Dynamic,Django Models,Models,我开始试验django突变体0.0.2(关于django 1.4.2),但由于缺乏文档,我几乎一无所获。按照我对项目描述的理解,我可以使用它动态地创建模型,因此我认为我可以将它与django admin接口连接起来,这样我就可以创建模型并在那里定义它的所有字段。我看到了其他一些替代方案,如django eav,dynamo,Will Hardy的动态模型,等等。但听起来这是迄今为止最好的实现,所以我想我应该使用它 我已将其放入settings.py: INSTALLED_APPS = (

我开始试验
django突变体0.0.2
(关于
django 1.4.2
),但由于缺乏文档,我几乎一无所获。按照我对项目描述的理解,我可以使用它动态地创建模型,因此我认为我可以将它与
django admin
接口连接起来,这样我就可以创建模型并在那里定义它的所有字段。我看到了其他一些替代方案,如
django eav
dynamo
,Will Hardy的
动态模型
,等等。但听起来这是迄今为止最好的实现,所以我想我应该使用它

我已将其放入
settings.py

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.admin',
    'south',
    'polymodels',
    'mutant',
    'mutant.contrib.boolean',
    'mutant.contrib.temporal',
    'mutant.contrib.file',
    'mutant.contrib.numeric',
    'mutant.contrib.text',
    'mutant.contrib.web',
    'mutant.contrib.related',
    'dynamodels'   # this is the name of my testapp
)
我打开了
django-mutant
的源代码,想知道我应该做什么,我认为将
mutant.models.ModelDefinition
mutant.models.FieldDefinition
导入我的
admin.py
并注册就足够了,所以我尝试了以下方法:

from django.contrib import admin

from mutant import models


class ModelDefinitionAdmin(admin.ModelAdmin):
    pass

admin.site.register(models.ModelDefinition, ModelDefinitionAdmin)


class FieldDefinitionAdmin(admin.ModelAdmin):
    pass

admin.site.register(models.FieldDefinition, FieldDefinitionAdmin)
在syncdb之后,我让它运行起来,在我的管理界面中有一个“变种”部分,里面有一个“模型定义”和“字段”。我成功添加了一个模型,尽管我无法指定
已安装的应用程序列表中的任何appname
。添加字段失败严重,因为它的
Model def
参数我确实选择了我以前创建的模型(它是列表中唯一的一个),并且我确实为
内容类型选择了“Integer field definition”。按下“保存”按钮,我得到了以下信息:

NotImplementedError at /admin/mutant/fielddefinition/add/

No exception supplied
...
...
/home/user/dev/virenvs/dynamicmodels/lib/python2.6/site-packages/django_mutant-0.0.2-py2.6.egg/mutant/models/field/__init__.py in save
        return super(FieldDefinition, self).save(*args, **kwargs) ...

/home/user/dev/virenvs/dynamicmodels/lib/python2.6/site-packages/django_polymodels-1.0.1-py2.6.egg/polymodels/models.py in save
        return super(BasePolymorphicModel, self).save(*args, **kwargs) ...

/home/user/dev/virenvs/dynamicmodels/lib/python2.6/site-packages/django_mutant-0.0.2-py2.6.egg/mutant/models/model/__init__.py in save
        self.model_def.model_class(force_create=True) ...

/home/user/dev/virenvs/dynamicmodels/lib/python2.6/site-packages/django_mutant-0.0.2-py2.6.egg/mutant/models/model/__init__.py in model_class
            model_class = self._create_model_class(existing_model_class) ...

/home/user/dev/virenvs/dynamicmodels/lib/python2.6/site-packages/django_mutant-0.0.2-py2.6.egg/mutant/models/model/__init__.py in _create_model_class
        attrs = self.get_model_attrs(existing_model_class) ...

/home/user/dev/virenvs/dynamicmodels/lib/python2.6/site-packages/django_mutant-0.0.2-py2.6.egg/mutant/models/model/__init__.py in get_model_attrs
                            for f in self.fielddefinitions.select_subclasses())) ...

/home/user/dev/virenvs/dynamicmodels/lib/python2.6/site-packages/django_mutant-0.0.2-py2.6.egg/mutant/models/model/__init__.py in <genexpr>
                            for f in self.fielddefinitions.select_subclasses())) ...

/home/user/dev/virenvs/dynamicmodels/lib/python2.6/site-packages/django_mutant-0.0.2-py2.6.egg/mutant/models/field/__init__.py in field_instance
        cls = self.get_field_class() ...

/home/user/dev/virenvs/dynamicmodels/lib/python2.6/site-packages/django_mutant-0.0.2-py2.6.egg/mutant/models/field/__init__.py in get_field_class
            raise NotImplementedError 
但是,例如,当我从mysql控制台检查数据库中的实际数据时,数据库中不存在我的表。有一些突变体的表,它们包含关于我的模型和字段的条目,但我认为,一旦构建了动态模型类,它也将按原样写入数据库

更新3:
事实上我错了,这个表是在我的数据库中找到的,它的前缀是“突变体”,所以我没有认出它在那里。看起来这将是一个有效的方法来使用它,尽管制作一个像样的用户友好界面来使用它需要更多的工作。

好的,对不起,我太忙了(可能更懒了),无法完成我所说的像样的应用程序。但至少为了帮上一点忙,我写了一篇关于这个主题的肮脏博文,并为“突变体”添加了一个CRUD应用程序示例,但请注意,它确实非常基本,只是为了演示启动和运行的前几个步骤


请回答您自己的问题。谢谢你的工作进展如何?你能分享一个使用django突变体的工作示例吗?我正在为突变体开发一个CRUD接口,但不幸的是,我的工作几乎没有时间用于辅助项目。一旦我有了一个工作原型,我就会和大家分享。嗨,Andrean,有什么消息,有什么你能/愿意分享的吗?
from django.contrib import admin

from mutant import models

for field_type in models.FieldDefinitionBase._field_definitions.values():
    attrs = {'model': field_type}
    FieldDefAdmin = type('{0}Admin'.format(field_type.__name__),
                         (admin.ModelAdmin,),
                         attrs)
    admin.site.register(field_type, FieldDefAdmin)


class ModelDefinitionAdmin(admin.ModelAdmin):
    model = models.ModelDefinition

admin.site.register(models.ModelDefinition, ModelDefinitionAdmin)