我们有一个连接到多个MS SQL数据库实例的Django应用程序.每个应用程序都有一个router.py,用于处理将进程路由到每个数据库.
这是我第一次设置多个数据库访问.
Django内置应用程序通过此router.py路由到默认数据库:
class DjangoRouter(object):
"""
A router to control all database operations on models in the
auth application.
"""
def db_for_read(self, model, **hints):
"""
Attempts to read auth models go to auth.
"""
app_list = ('auth', 'admin', 'contenttypes', 'sessions',)
if model._meta.app_label in app_list:
return 'default'
return None
def db_for_write(self, model, **hints):
"""
Attempts to write auth models go to auth.
"""
app_list = ('auth', 'admin', 'contenttypes', 'sessions',)
if model._meta.app_label in app_list:
return 'default'
return None
def allow_relation(self, obj1, …Run Code Online (Sandbox Code Playgroud) 我通过执行创建User Profile应用程序和扩展User模块的整个过程为User添加了一个额外的字段.
它似乎没有错误.我无法弄清楚或在任何地方找到如何在管理员创建新用户的页面中显示此新字段.因此,根据个人信息,如名字和姓氏,我希望有我添加到用户个人资料的位置字段.
我的用户资料:
from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
class UserProfile(models.Model):
# This field is required.
user = models.OneToOneField(User)
# Other fields here
location = models.CharField(max_length=20)
# definition of UserProfile from above
# ...
def create_user_profile(sender, instance, created, **kwargs):
if created:
UserProfile.objects.create(user=instance)
post_save.connect(create_user_profile, sender=User)
Run Code Online (Sandbox Code Playgroud)
我也想知道如何强制要求电子邮件,如密码和用户名.只需将Django文件夹中的用户模型更改为:
email = models.EmailField(_('e-mail address'), unique=True)
Run Code Online (Sandbox Code Playgroud)
完全不起作用.
[更新] 所以这是我创建的admin.py帽子.我应该在settings.py文件中将其包含在哪里,以便实际使用添加了用户模块和新表单的文件夹?我有这一行但它似乎并没有使用新的表单AUTH_PROFILE_MODULE ='UserProfile.UserProfile'(我有一个名为UserProfile的文件夹,其中包含两个snipets代码)
from django.contrib import admin
from django.contrib.auth.models import User,Group
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.forms import UserCreationForm, UserChangeForm
from django …Run Code Online (Sandbox Code Playgroud) 我希望Django发送电子邮件到用户的电子邮件地址,登录详细信息,一旦管理员将新用户添加到管理站点.所以我尝试使用Django信号,但只是becoz django用户注册是一个两步过程信号得到通知的第一步只有没有电子邮件地址的电子邮件功能(第二步).我的信号代码:
def email_new_user(sender, **kwargs):
if kwargs["created"]: # only for new users
new_user = kwargs["instance"]
send_mail('Subject here', 'Here is the message.', 'from@example.com',['to@example.com'], fail_silently=False)
post_save.connect(email_new_user, sender=User)
Run Code Online (Sandbox Code Playgroud)
所以我试图克服这个问题.我在admin.py中使用此代码
class UserAdmin(admin.ModelAdmin):
list_display = ('username', 'email', 'first_name', 'last_name', 'date_joined', 'last_login')
search_fields = ['username', 'email']
filter_horizontal = ('user_permissions',)
admin.site.unregister(User)
admin.site.register(User, UserAdmin)
Run Code Online (Sandbox Code Playgroud)
这使得所有注册过程都是一个单步过程,我的信号开始工作,并在添加新用户时向user_id发送邮件.但问题出现之后是:
1.用户密码不会转换为哈希值,并且在进入表单时可见,这使得用户无法登录管理站点.
2.Email字段不是强制性的,我想成为强制性的.
请帮我 :(
[编辑]
I tried your code But I m still at same place where i was before posting this question.
the code i used in my admin.py is:
from django.contrib …Run Code Online (Sandbox Code Playgroud)