这是我的模型
class Profile(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
first_name = models.CharField(_('نام'), max_length=255)
last_name = models.CharField(_('نام خانوادگی'),max_length=255)
image = models.ImageField(_('تصویر'),null=True, blank=True)
description = models.TextField(_('توضیحات'),)
created_date = jmodels.jDateTimeField(_('تاریخ ایجاد'), auto_now_add=True)
updated_date = jmodels.jDateTimeField(_('تاریخ آخرین به روز رسانی'),auto_now=True)
USERNAME_FIELD = 'user'
REQUIRED_FIELDS = []
def __str__(self) -> str:
return self.user.email
class Meta:
ordering = ['-updated_date']
verbose_name = 'پروفایل'
verbose_name_plural = 'پروفایل ها'
@receiver(post_save, sender=User)
def save_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)
在管理面板中,我只希望个人资料所有者和超级用户有权编辑该个人资料
我不知道我应该在哪里以及做什么改变
要实现对象级权限,我建议您查看 Django Guardian,特别是管理集成。
模型设置
Profile
类,如下所示:
from django.contrib import admin
from app_name.models import Profile
from guardian.admin import GuardedModelAdmin
class ProfileAdmin(GuardedModelAdmin):
# Configuration done here
pass
admin.site.register(Profile, ProfileAdmin)
然后更新您的
save_profile
信号以向用户分配编辑权限,请记住模型的 默认编辑权限 为 <app_name>.change_profile
。
from guardian.shortcuts import assign_perm
@receiver(post_save, sender=User)
def save_profile(sender, instance, created, **kwargs):
if created:
profile_obj = Profile.objects.create(user=instance)
assign_perm("<app_name>.change_profile", instance, profile_obj)
查看 Django Guardian 文档,了解有关如何分配权限的更多详细信息。
由于默认情况下超级用户被授予所有权限,因此无需进行任何其他更改即可允许超级用户编辑
Profile
记录。