在我安装 Django-userena 后,我的 django 版本有一个错误:1.9.5 我只是一步一步地安装 django-userena,但是当我迁移它时,发生了一个错误,我不知道如何解决它。
Traceback (most recent call last):
File "manage.py", line 12, in <module>
execute_from_command_line(sys.argv)
File "C:\Python27\lib\site-packages\django\core\management\__init__.py", line 353, in execute_from_command_line
utility.execute()
File "C:\Python27\lib\site-packages\django\core\management\__init__.py", line 345, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "C:\Python27\lib\site-packages\django\core\management\base.py", line 348, in run_from_argv
self.execute(*args, **cmd_options)
File "C:\Python27\lib\site-packages\django\core\management\base.py", line 399, in execute
output = self.handle(*args, **options)
File "C:\Python27\lib\site-packages\django\core\management\commands\migrate.py", line 204, in handle
emit_post_migrate_signal(self.verbosity, self.interactive, connection.alias)
File "C:\Python27\lib\site-packages\django\core\management\sql.py", line 50, in emit_post_migrate_signal
using=db)
File "C:\Python27\lib\site-packages\django\dispatch\dispatcher.py", line 192, in send
response = receiver(signal=self, sender=sender, **named)
File "C:\Python27\lib\site-packages\guardian\management\__init__.py", …Run Code Online (Sandbox Code Playgroud) 我对django守护者有些问题.我有一个新闻模型定义
class News(models.Model):
title = models.CharField(_('Title'), max_length=255)
slug = models.SlugField(_('Slug'), unique_for_date='pub_date',)
objects = models.Manager()
featured = FeaturedNewsManager()
link = models.URLField(_('Link'), blank=True, null=True,)
class Meta:
permissions = (('view_news', _('view news')))
Run Code Online (Sandbox Code Playgroud)
然后我尝试将view_news权限分配给我的一个用户,我收到以下错误:
>>> from guardian.shortcuts import assign_perm
>>> g = Group.objects.latest('pk')
>>> n = News.objects.get(pk=4)
>>> assign_perm( 'news.view_news', g, n)
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "/home/roberto/.virtualenvs/ve_news/local/lib/python2.7/site-packages/guardian/shortcuts.py", line 93, in assign_perm
return model.objects.assign_perm(perm, group, obj)
File "/home/roberto/.virtualenvs/ve_news/local/lib/python2.7/site-packages/guardian/managers.py", line 90, in assign_perm
permission = Permission.objects.get(content_type=ctype, codename=perm)
File …Run Code Online (Sandbox Code Playgroud) 通过实现以下代码,我能够删除“保存并添加另一个”和“保存并继续编辑”按钮:
# At the start of my admin.py file I have:
from django.contrib.admin.templatetags.admin_modify import *
from django.contrib.admin.templatetags.admin_modify import submit_row as original_submit_row
@register.inclusion_tag('admin/submit_line.html', takes_context=True)
def submit_row(context):
ctx = original_submit_row(context)
ctx.update({
'show_save_and_add_another': context.get('show_save_and_add_another', ctx['show_save_and_add_another']),
'show_save_and_continue': context.get('show_save_and_continue', ctx['show_save_and_continue'])
})
return ctx
class MyModelAdmin(GuardedModelAdmin):
# Then inside MyModelAdmin I have this:
def change_view(self, request, object_id, form_url='', extra_context=None):
extra_context = extra_context or {}
extra_context['show_save_and_add_another'] = False
extra_context['show_save_and_continue'] = False
return super(MyModelAdmin, self).change_view(request, object_id,
form_url, extra_context=extra_context)
Run Code Online (Sandbox Code Playgroud)
当我使用我的 change_view 时,这很有效,但是当我添加模型的新实例时,按钮会重新出现。我尝试了以下方法:
def add_view(self, request, form_url='', extra_context=None):
extra_context = …Run Code Online (Sandbox Code Playgroud) django django-templates django-admin django-guardian django-1.6
django-guardian提供的功能有哪些,django auth的权限尚未提供?
以下是django-guardian文档列出的功能:
"对象级"权限是什么意思?是否与在auth的权限中已经支持的对象实例分配权限相同?
"不仅可以为每种类型的对象设置权限,还可以为每个特定的对象实例设置权限."
https://docs.djangoproject.com/en/dev/topics/auth/default/#default-permissions
我正在使用 django-guardian 检查用户的对象权限。在我的特殊情况下,我扩展了用户模型。在我的 models.py 中,我扩展了这样的用户模型: 在此处输入图像描述
class User(AbstractBaseUser):
email = models.EmailField(
verbose_name='email address',
max_length=255,
unique=True,
)
active = models.BooleanField(default=True)
staff = models.BooleanField(default=False)
admin = models.BooleanField(default=False)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = [] # Email & Password are required by default.
def get_full_name(self):
# The user is identified by their email address
return self.email
def get_short_name(self):
# The user is identified by their email address
return self.email
def __str__(self): # __unicode__ on Python 2
return self.email
def has_perm(self, perm, obj=None):
"Does the …Run Code Online (Sandbox Code Playgroud) 我正在使用django-guardian为Django项目编写测试。权限的夹具如下所示:
- fields:
content_type: 10
object_pk: '2'
permission: 22
user: 1
model: guardian.userobjectpermission
pk: 1
Run Code Online (Sandbox Code Playgroud)
它是安全的基准content_type,并permission通过ID?还是ID会改变(即当我添加额外的权限/模型时)?
引用自动加载的对象的最佳方法是什么?
我正在尝试django-guardian使用自定义用户模型。该模型从继承AbstractUser,也从继承GuardianUserMixin。这是User模型:
class User(AbstractUser, GuardianUserMixin):
class Meta:
managed = False
db_table = 'users'
Run Code Online (Sandbox Code Playgroud)
我面临的问题是在检查权限时。例如这里request.user.has_perm(...)
这是错误消息:
ProgrammingError at /manageDb/mira/follow/14/
relation "users_groups" does not exist
LINE 1: ...sion"."group_id" = "auth_group"."id" ) INNER JOIN "users_gro...
追溯:
File "/home/khajvah/Project/mira_website/manageDb/views.py" in delete
486. if request.user.has_perm('follow', follow_object):
File "/usr/local/lib/python3.4/dist-packages/django/contrib/auth/models.py" in has_perm
353. return _user_has_perm(self, perm, obj)
File "/usr/local/lib/python3.4/dist-packages/django/contrib/auth/models.py" in _user_has_perm
281. if backend.has_perm(user, perm, obj):
File "/usr/local/lib/python3.4/dist-packages/guardian/backends.py" in has_perm
89. return check.has_perm(perm, obj)
File "/usr/local/lib/python3.4/dist-packages/guardian/core.py" in has_perm
54. …Run Code Online (Sandbox Code Playgroud)