我希望我网站中的每个用户都能在他的个人资料中看到一张图片.我不需要任何缩略图或类似的东西,只需每个用户的图片.越简单越好.问题是我不知道如何将这种类型的字段插入我的用户配置文件.有什么建议?
我在Django中使用自定义用户模型.该模型工作正常,并能够创建用户.但是当我尝试访问管理页面时,它会抛出错误
FieldError at /admin/
Unknown field(s) (added_on) specified for UserProfile
Run Code Online (Sandbox Code Playgroud)
该UserProfile有一个added_on属性.我想不出有什么理由说明这一点.如果我added_on从admin.py文件中删除该属性,则管理面板可以正常工作.
这是我的models.py
from django.db import models
from django.contrib.auth.models import User, BaseUserManager, AbstractBaseUser
from django.conf import settings
class UserProfileManager(BaseUserManager):
def create_user(self, email, username, name, password=None):
if not email:
raise ValueError('Users must have an email address')
user = self.model(
username=username,
name=name,
email=self.normalize_email(email),
)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, email, username, name, password):
user = self.create_user(email=email,
password=password,
username=username,
name=name
)
user.is_admin = True
user.save(using=self._db)
return user …Run Code Online (Sandbox Code Playgroud) 我有一个拥有大量客户群的django网站.我想让我们的客户服务部门能够改变正常的用户帐户,做更改密码,电子邮件地址等等.但是,如果我授予某人内置auth | user | Can change user权限,他们就可以is_superuser在任何人身上设置标志.帐户,包括他们自己.(!!!)
为非超级用户员工删除此选项的最佳方法是什么?我确定它涉及子类化django.contrib.auth.forms.UserChangeForm并将其挂钩到我已经自定义的UserAdmin对象......不知何故.但我找不到任何关于如何做到这一点的文档,我还不太了解内部情况.
看起来很难的django auth模型代码,我遇到了这段代码:
class User(AbstractUser):
class Meta(AbstractUser.Meta):
swappable = 'AUTH_USER_MODEL'
Run Code Online (Sandbox Code Playgroud)
很明显它与AUTH_USER_MODELsettings.py中的新设置有关,但它是如何实际工作的,通过什么python"技巧"?
在其他情况下可以使用它?
如果你想在Django中存储关于用户(django.contrib.auth.models.User)的额外信息,你可以使用漂亮的AUTH_PROFILE_MODULE来插入"profile"模型.然后每个用户获取一个配置文件 这一切都在这里描述:
现在,假设我已经使用名为UserProfile的模型创建了一个名为accounts的应用程序,并将其注册为我的用户的配置文件模型.如何在管理界面中内联编辑配置文件以编辑用户(反之亦然)?
我按照dev doc中的描述扩展了django用户模型.我不想保留大部分原始用户模型功能,因此我扩展了AbstractUser类.我在settings.py中定义了:
AUTH_USER_MODEL = 'myapp.CustomUser'
Run Code Online (Sandbox Code Playgroud)
我的用户类:
class CustomUser(AbstractUser):
custom_field = models.ForeignKey('OtherModel')
objects = UserManager()
Run Code Online (Sandbox Code Playgroud)
一切似乎工作正常,但当我尝试由管理网站管理:
admin.site.register(CustomUser, UserAdmin)
Run Code Online (Sandbox Code Playgroud)
我在管理员CustomUser创建页面上获得此错误(在验证密码确认表单后):
AttributeError: Manager isn't available; User has been swapped for 'myapp.CustomUser'
Run Code Online (Sandbox Code Playgroud)
关键是我需要管理站点管理的这个模型,以便拥有与原始用户模型相同的创建过程(使用密码验证的两步过程).
要使用自定义字段扩展User对象,Django文档建议使用UserProfiles.但是,根据这个问题回答一年左右的问题:
扩展django.contrib.auth.models.User现在也更好 - 自从Django的继承代码重构在模型API中以来.
和诸如物品此布局如何与优点延伸,以与自定义字段的用户模型,一起(,而不是通过.get_profile直接从用户对象检索属性()).
所以我想知道在这个问题上是否有任何共识,或者使用其中一个的原因.甚至Django团队目前的想法是什么?
我通过电子邮件登录的自定义用户模型:
class MyUser(AbstractBaseUser):
id = models.AutoField(primary_key=True) # AutoField?
is_superuser = models.IntegerField(default=False)
username = models.CharField(unique=True,max_length=30)
first_name = models.CharField(max_length=30, default='')
last_name = models.CharField(max_length=30, default='')
email = models.EmailField(unique=True,max_length=75)
is_staff = models.IntegerField(default=False)
is_active = models.IntegerField(default=False)
date_joined = models.DateTimeField(default=None)
# Use default usermanager
objects = UserManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['username']
class Meta:
db_table = 'auth_user'
Run Code Online (Sandbox Code Playgroud)
为此,我能够成功创建一个超级用户.但是,当我尝试使用电子邮件和密码登录时,我收到此错误:
'MyUser' object has no attribute 'has_module_perms'
Run Code Online (Sandbox Code Playgroud)
知道我做错了什么吗?
我有一些问题在一个项目中,我需要与三个(可能更多)类型的用户一起工作,这些用户有不同的角色:医生患者管理员
我一直在考虑使用Django Model Users并扩展它创建一个userprofile模型......但是我忽略了如何管理不同的角色,因为userprofile模型将包含用户模型的字段,尽管我不知道如何解决角色主题.
1用户有多个用户配置文件?我不知道
或者我可能应该创建一个角色模型/表,在其中我指定角色类型并创建与用户模型的关系.这是一个很好的可能性.
另一种可能性(作为下面的评论)是检查Django权限系统,我可以在其中创建用户组,并为这些组分配权限,虽然在这里我只能编辑,创建和删除模型吗?
我对如何解决这个问题感到困惑
搜索我找到了这个应用程序. https://github.com/dabapps/django-user-roles
如果有人可以指导我,我将非常感谢最诚挚的问候
I setup if statement to see if the current user has a password set. For some reason it just won't work. I have tried:
{% if not user.password %}
{% if user.password == None %}
{% if user.password is None %}
Run Code Online (Sandbox Code Playgroud)
I have 2 user accounts (different browsers open), one with a password in one, and one without in the other. When I use the statements above I get the same showing in both browsers. What am I doing wrong?