python - django modelAdmin 显示的标题
问题描述
我是 Django 的新手。我有以下代码:
模型:
class MyUser(AbstractUser):
profile = models.OneToOneField(Profile, null=True, on_delete=models.PROTECT)
我的个人资料模型仅包含一些个人字段,例如全名、性别、出生日期等。
行政:
class MyUserInline(admin.StackedInline):
model = MyUser
exclude = ('first_name', 'last_name', 'username', 'plan', 'password')
fieldsets = (
(_('Personal info'), {'fields': ('email',)}),
(_('Permissions'), {'fields': ('is_active', 'is_staff', 'is_superuser',
'groups', 'user_permissions')}),
(_('Important dates'), {'fields': ('last_login', 'date_joined')}),
)
class MyUserChangeForm(UserChangeForm):
class Meta(UserChangeForm.Meta):
model = MyUser
def clean_password(self):
return ""
class ProfileAdmin(admin.ModelAdmin):
inlines = (MyUserInline,)
change_user_password_template = None
form = MyUserChangeForm
change_password_form = AdminPasswordChangeForm
ordering = ('myuser__email',)
def save_model(self, request, obj, form, change):
obj.myuser.username = obj.myuser.email
obj.save()
list_display = ('full_name', 'myuser_email', 'myuser_is_staff', 'myuser_is_superuser', 'myuser_is_active')
def user_change_password(self, request, id, form_url=''):
if not self.has_change_permission(request):
raise PermissionDenied
user = self.get_object(request, unquote(id))
if user is None:
raise Http404(_('%(name)s object with primary key %(key)r does not exist.') % {
'name': force_text(self.model._meta.verbose_name),
'key': escape(id),
})
if request.method == 'POST':
form = self.change_password_form(user, request.POST)
if form.is_valid():
form.save()
# rest of method
# other minor methods
问题是:
在最近的操作中或编辑用户后,我看到的是配置文件对象而不是用户名或电子邮件。 在此处输入图像描述
看这里:我的另一个问题
在配置文件编辑页面中,权限部分仅包含一个包含所有可能权限列表的框,但是必须有另一个框包含用户当前权限列表
现在的样子:在此处输入图像描述
它必须是什么样子:在此处输入图像描述
tnx
更新
对于我的第二个问题(更改密码),我在模型中添加了以下几行Profile
:
def set_password(self, raw_password):
self.myuser.password = make_password(raw_password)
self.myuser._password = raw_password
在调试时,raw_password
正确地是我在表单中插入的内容,并且在从第一行移动后,self.myuser.password
具有新值,但新值未提交到数据库中。
解决方案
第 1 点
在您的模型中
定义一个__unicode__
或__str__
(根据您的 python 版本)Profile
返回您想要显示的内容的方法。
第3点
您可以将以下行添加到您的ProfileAdmin
:
filter_horizontal = ['user_permissions']
生成一个漂亮的两列过滤字段,如您的图像中所示。请参阅文档。
您也可以直接使用FilteredSelectMultiple
来自的小部件django.contrib.admin.widgets
推荐阅读
- c# - 谁能告诉我如何创建一个独立的 SWF 启动器来加载 SWF
- php - PHP MYSQL:以安全的方式将 ID 从一个页面发送到另一个页面
- c++ - 使用 constexpr 初始化非常量静态字符串
- typescript - SystemJS 看不到导出
- spring-boot - Spring Thymeleaf 中的可编辑表
- flutter - Expanded Widget 抛出“RenderBox 未布局”异常
- nativescript - 列表视图上的三元操作不适用于 nativescript
- c# - 您如何在代码中组织您的操作方法和控制器 - 通过 url 或返回的实体?
- java - Spring核心中的自动装配冲突与xml配置
- swift - 如何获取 uiview 的任何信息(视觉调试器报告的原始地址)