Django Admin的多种数据存储支持和数据库迁移

2023-04-11 00:00:00 数据存储 迁移 多种

Django Admin提供了对多种数据库的支持,包括MySQL、PostgreSQL、SQLite等。在项目的settings.py文件中,可以配置数据库连接信息,例如:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'mydatabase',
        'USER': 'mydatabaseuser',
        'PASSWORD': 'mypassword',
        'HOST': '127.0.0.1',
        'PORT': '5432',
    }
}

在指定数据库模型时,可以通过继承Django提供的Model类来定义,例如:

from django.db import models

class User(models.Model):
    name = models.CharField(max_length=100)
    email = models.EmailField()
    phone = models.CharField(max_length=20)

    def __str__(self):
        return self.name

当对数据库的数据模型进行修改时,可以使用Django提供的数据库迁移工具,命令为:

python manage.py makemigrations
python manage.py migrate

其中,makemigrations命令会生成一个迁移脚本文件,用于保存数据库模型的修改信息,而migrate命令则会执行这些数据库模型的修改操作。例如,对于以上定义的User模型,如果要添加一个age字段,可以修改代码为:

from django.db import models

class User(models.Model):
    name = models.CharField(max_length=100)
    email = models.EmailField()
    phone = models.CharField(max_length=20)
    age = models.IntegerField()

    def __str__(self):
        return self.name

然后执行makemigrations和migrate命令即可更新数据库表结构:

python manage.py makemigrations
python manage.py migrate

在Django Admin中,可以通过继承Django提供的admin.ModelAdmin类来注册管理数据模型,在admin.py文件中定义,例如:

from django.contrib import admin
from .models import User

class UserAdmin(admin.ModelAdmin):
    list_display = ('id', 'name', 'email', 'phone', 'age')

admin.site.register(User, UserAdmin)

在Django Admin中,如果数据模型中存在外键关联,也可以使用ForeignKey和ManyToManyField字段在数据模型中定义,并在admin.py文件中使用Inline模型来管理数据模型,例如:

from django.contrib import admin
from .models import Post, Comment, Tag

class CommentInline(admin.TabularInline):
    model = Comment

class PostAdmin(admin.ModelAdmin):
    inlines = [CommentInline]
    list_display = ('id', 'title', 'created_time', 'updated_time')

class TagAdmin(admin.ModelAdmin):
    pass

admin.site.register(Post, PostAdmin)
admin.site.register(Tag, TagAdmin)

以上代码中,Comment模型使用ForeignKey字段与Post模型关联,Tag模型使用ManyToManyField字段与Post模型关联,而在PostAdmin中,使用CommentInline来管理Comment模型。

相关文章