Django - 灵活的模型?

时间:2015-12-15 12:18:18

标签: django django-models

我是Django的新手,想用它做一个简单的CMS。

应该有一个页面模型。用户应该能够设置页面类型,然后应该有不同的字段。

例如(简化 - 实际上会有更多字段):

Page - Type 1: title, text
Page - Type 2: title, text, images
Page - Type 3: title, text_column_1, text_column_2, images, links, downloads

我将预定义字段。用户无法改变它们。

如果不为每种类型做单独的(子)模型,Django如何才能最好地解决这个问题?

1 个答案:

答案 0 :(得分:2)

class PageFieldDefinitions(models.Model):
    field_name = models.CharField(max_length=100, blank=True, default='', null=True)

class Pages(models.Model):
    name = models.CharField(max_length=100, blank=True, default='', null=True)

class PageFieldContent(models.Model):
    content = models.CharField(max_length=100, blank=True, default='', null=True)
    page_field = models.ForeignKey(PageFieldDefinitions)
    page = models.ForeignKey(Pages)

对于Django:您可以使用上面的模型。我正在使用这种模型来填充我的模型。如果使用" big"则无法动态扩展模型。模型。因为要预测模型的大小并不容易。您可以在管理网站上使用此功能。

此外,我正在使用Django和PostgreSQL,如果你不修改数据库,这个数据库不支持全文搜索。 (http://www.postgresql.org/docs/9.3/static/textsearch.html

对于Meteor:如您所知或不知道MeteorJS是一个完整的堆栈框架使用MongoDB。就我而言,Mongo是一个快速的NoSQL数据库,支持全文搜索。如果您不能很好地创建数据库,那么由于NoSQL,您将看到缺乏数据完整性。如果您是一位经验丰富的JS开发人员,与Django相比,使用Meteor开发CMS系统将花费更少的时间。

在我的项目中,我需要快速的搜索引擎和数据完整性。我为Django定义了两个DB。我使用Mongo搜索引擎和PostgreSQL来保存我的数据。

阅读以下这些来源: Django中的Mongo:http://django-mongodb-engine.readthedocs.org/en/latest/topics/setup.html

Django中的多个DB:https://docs.djangoproject.com/en/1.9/topics/db/multi-db/

Django中的多DB和多模型:multiple databases and multiple models in django

settings.py

DATABASES = {
    'default': {
        'NAME': 'app_data',
        'ENGINE': 'django.db.backends.postgresql',
        'USER': 'postgres_user',
        'PASSWORD': 's3krit'
    },
    'search': {
        'ENGINE' : 'django_mongodb_engine',
        'NAME' : 'my_database',
        ...
        'OPTIONS' : {
           'socketTimeoutMS' : 500,
            ...
        }
    }
} 

models.py

class SearchContent(models.Model):
    content = models.CharField(max_length=100, blank=True, default='', null=True)
    class Meta:
        app_label = 'my_database'