如果我要使用 MySQL 数据库扩展其功能,我对 User
的表结构有疑问。
给定models.py文件
class LibraryUser(models.Model):
user_id = models.OneToOneField(User)
is_catalogue_subscriber = models.IntegerField(default=1)
is_research_subscriber = models.IntegerField(default=1)
library_membership_number = models.CharField(max_length=64)
我有一个 SQL 表结构
CREATE TABLE library_user(
user_id int(10) primary key
is_catalogue_subscriber integer(1) DEFAULT 1
is_research_subscriber = integer(1) DEFAULT 1
library_membership_number = varchar(16)
)
现在,当我启动服务器并访问管理页面中的帐户时,Django 会抛出错误:
Exception Type: OperationalError
Exception Value:
(1054, "Unknown column 'library_user.id' in 'where clause'")
最佳答案
使用
user = models.OneToOneField(User, Primary_key=True)
即删除属性名称中的 _id。
如果您只是想定义更丰富的用户模型(即添加更多属性),您可以
use a one-to-one relationship to a model containing the fields for additional information. This one-to-one model is often called a profile model, as it might store non-auth related information about a site user. For example you might create a LibraryUser model:
from django.contrib.auth.models import User
class LibraryUser(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
is_catalogue_subscriber = models.IntegerField(default=1)
is_research_subscriber = models.IntegerField(default=1)
library_membership_number = models.CharField(max_length=64)
假设现有 LibraryUser Fred Smith 同时拥有 User 和 LibraryUser 模型,您可以使用 Django 的标准相关模型约定来访问相关信息:
>>> u = User.objects.get(username='fsmith')
>>> freds_department = u.libraryuser.department
然后将配置文件模型的字段添加到管理中的用户页面
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User
from my_user_profile_app.models import LibraryUser
# Define an inline admin descriptor for Employee model
# which acts a bit like a singleton
class LibraryUserInline(admin.StackedInline):
model = LibraryUser
can_delete = False
verbose_name_plural = 'libraryuser'
# Define a new User admin
class UserAdmin(UserAdmin):
inlines = (LibraryUserInline, )
# Re-register UserAdmin
admin.site.unregister(User)
admin.site.register(User, UserAdmin)
全部取自official docs
关于python - 在 Django 1.8 的 Mysql 中使用自定义用户数据库结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33051472/