Python 在Django 1.8的Mysql中使用自定义用户数据库结构
如果我使用MySQL数据库扩展它的功能,我对用户的表结构有一个问题 给定models.py文件 我有一个SQL的表结构Python 在Django 1.8的Mysql中使用自定义用户数据库结构,python,mysql,django,Python,Mysql,Django,如果我使用MySQL数据库扩展它的功能,我对用户的表结构有一个问题 给定models.py文件 我有一个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(
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'")
您缺少的是,默认情况下,django模型自动包含一个映射到models.AutoField的id字段 您需要指定DB表id是用户id而不是id。 您希望将您的用户id设置为主键。它应该通过向该字段添加primary_key=True来工作,如:
class LibraryUser(models.Model):
user_id = models.OneToOneField(User, primary_key=True)
is_catalogue_subscriber = models.IntegerField(default=1)
is_research_subscriber = models.IntegerField(default=1)
library_membership_number = models.CharField(max_length=64)
使用
user=models.onetoonefeelduser,主键=True
i、 e.在属性名称中删除_id
如果您只是想定义一个更丰富的用户模型,即添加更多属性,您可以
对包含字段的模型使用一对一关系
有关更多信息,请参阅。这种一对一的模式通常被称为
概要文件模型,因为它可能存储有关
网站用户。例如,您可以创建LibraryUser模型:
假设现有的LibraryUser Fred Smith同时拥有用户和LibraryUser模型,您可以使用Django的标准相关模型约定访问相关信息:
>>> u = User.objects.get(username='fsmith')
>>> freds_department = u.libraryuser.department
然后,将配置文件模型的字段添加到admin do中的用户页面
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)
所有这些都取自,您应该使用django迁移来处理SQL。检查此项:。除非需要,否则不要创建自己的SQL。只需创建模型并运行./manage.py makemigrations&./manage.py migrate。linkHello@BogdanIulianBursuc中的更多信息问题是,我正在将Django集成到一个现有的应用程序和一组现有的库用户中。因此,我想利用用户模型进行身份验证。然后检查如何扩展用户模型use User=models.onetoonefelduser,primary_key=True,即在属性nameHi@Pynchia中删除_id让我在关闭此解决方案之前尝试一下?嘿!我认为你的解决方案是正确的。我使用了user,而不是user\u id。在我给你正确的标志之前,让我确认一下这是否正确?你是对的。仅使用user而不是user_id也可以解决另一个问题。因为django用_id作为关系字段的后缀
>>> 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)