django -- model中只有Field类型的数据才能成为数据库中的列

本文详细介绍了 Django 框架中 Model 的定义方法,包括字段类型、约束条件及 SQL 生成规则等内容。

一、model的定义:

from django.db import models

# Create your models here.

class Person(models.Model):
    first_name = models.CharField(max_length=100)
    last_name  = models.CharField(max_length=100)

    genders=[
            ('M',''),
            ('W',''),
        ]
    
    gender=models.CharField(max_length=64,choices=genders)

    class Meta():
        index_together = ["first_name", "last_name"]
        db_table="person"

 

二、目标SQL语句:

BEGIN;
--
-- Create model Person
--
CREATE TABLE "person" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "first_name" varchar(100) NOT NULL, "last_name" varchar(100) NOT NULL, "gender" varchar(64) NOT NULL);
--
-- Alter index_together for person (1 constraint(s))
--
CREATE INDEX "person_first_name_last_name_7d35cbb8_idx" ON "person" ("first_name", "last_name");
COMMIT;

 

三、总结:

  1、django默认给表加上一个id字段做主键。

  2、django默认所有的列都不为null。

  3、model只有Field类型的字段才能成为列。

 

 

----

转载于:https://www.cnblogs.com/JiangLe/p/7920057.html

<think>好的,用户想在Django Admin中操作MongoEngine的数据。首先,我需要回忆一下django-mongoengine的集成步骤。根据引用[1]和[2],用户需要在models.py里定义MongoEngine的Document模型,比如MQTTUser_MongoModel。接下来,要让这个模型在Django Admin中显示,可能需要创一个admin.py文件,并注册模型。 我记得Django Admin通常用于Django的ORM模型,但这里用的是MongoEngine,所以可能需要使用django-mongoengine提供的适配器或者特定的Admin类。引用[3]提到了应用案例和最佳实践,但没有直接说明Admin的配置。可能需要参考类似DjangoModelAdmin来设置。 用户可能需要继承admin.ModelAdmin,并在admin.site.register中注册他们的MongoEngine模型。但要注意,MongoEngine的Document和DjangoModel有所不同,可能需要额外的配置,比如指定字段或者单。例如,在admin.py中导入模型,然后注册,并可能需要自定义Admin类来处理字段显示。 另外,确保已经正确安装django-mongoengine,并在settings.py中配置了数据库连接。引用[3]里的运行示例应用命令可能涉及这些步骤,比如安装依赖和运行服务器。用户可能需要检查INSTALLED_APPS是否包含django_mongoengine,以及数据库设置是否正确指向MongoDB。 还可能遇到单验证或查询的问题,因为MongoDB和关系型数据库不同。需要确保Admin页面的字段与MongoEngine的字段类型兼容。例如,StringField在Admin中可能显示为普通的文本输入,而DateTimeField可能需要合适的widget。 最后,测试是否能在Admin中正确显示和编辑数据。如果遇到错误,可能需要查看日志,检查模型注册是否正确,或者是否有字段不兼容的情况。引用[3]提到的索引优化和数据备份也是后续需要考虑的,但当前问题主要集中在Admin集成上。</think>以下是如何在Django Admin中操作MongoEngine数据的完整教程,结合引用内容和实际开发经验整理: ### 一、环境配置 1. 安装依赖库 ```bash pip install django-mongoengine mongoengine ``` 2. 配置settings.py ```python INSTALLED_APPS = [ ... 'django_mongoengine', 'your_app' ] DATABASES = { 'default': { 'ENGINE': 'django.db.backends.dummy' } } MONGODB_DATABASES = { 'default': { 'name': 'your_db', 'host': 'localhost', 'port': 27017 } } ``` ### 二、定义MongoEngine模型 ```python # models.py from django_mongoengine import mongoengine as db class Article(db.Document): title = db.StringField(max_length=200) content = db.StringField() publish_date = db.DateTimeField() tags = db.ListField(db.StringField()) meta = { 'collection': 'blog_articles', 'ordering': ['-publish_date'] } ``` ### 三、配置Admin界面 ```python # admin.py from django_mongoengine.admin import DocumentAdmin from .models import Article class ArticleAdmin(DocumentAdmin): list_display = ('title', 'publish_date') search_fields = ('title', 'content') list_filter = ('tags',) fields = ('title', 'content', 'tags') admin.site.register(Article, ArticleAdmin) ``` ### 四、关键功能实现 1. **嵌套文档支持**: ```python class Comment(db.EmbeddedDocument): author = db.StringField() content = db.StringField() class Article(db.Document): comments = db.ListField(db.EmbeddedDocumentField(Comment)) ``` 2. **自定义单验证**: ```python from django import forms class ArticleForm(forms.ModelForm): class Meta: model = Article fields = '__all__' def clean_title(self): title = self.cleaned_data['title'] if len(title) < 10: raise forms.ValidationError("标题至少需要10个字符") return title class ArticleAdmin(DocumentAdmin): form = ArticleForm ``` ### 五、注意事项 1. 字段类型对应关系: - MongoDB ObjectId 字段需使用`db.ObjectIdField()` - 地理空间字段使用`db.PointField()` - 文件存储使用`db.FileField()` 2. 性能优化议: - 为常用查询字段添加索引 ```python meta = { 'indexes': [ {'fields': ['title'], 'unique': True}, {'fields': ['publish_date']} ] } ``` - 使用`select_related()`优化嵌套文档查询 - 避免在Admin中加载大型二进制字段 3. 权限控制示例: ```python class ArticleAdmin(DocumentAdmin): def has_add_permission(self, request): return request.user.is_superuser def has_delete_permission(self, request, obj=None): return request.user.is_staff ``` ### 六、调试工具 议安装`django-debug-toolbar-mongo`[^3],在settings.py中添加配置: ```python DEBUG_TOOLBAR_PANELS = [ ... 'debug_toolbar_mongo.panel.MongoDebugPanel' ] ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值