我是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如何才能最好地解决这个问题?
答案 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'