我有一个名为 Message 的模型,我使用 django-guardian 获得对象级权限。这个想法是消息实例中的 thefrom_user
和to_user
in 都应该具有can_view_message
权限。此功能是显示具有相同消息的消息列表thread_id
(创建消息时自动创建)。
@permission_required_or_403('can_view_message', (Message, 'pk', 'pk'))
def message_thread(request, pk):
selected_message = Message.objects.get(pk=pk)
threads = Message.objects.filter(thread_id=selected_message.thread_id)
context = RequestContext(request, {
'latest_messages': threads,
})
return render(request, 'myapp/messages_thread.html', context)
此请求的 url 模式:
url(r'^messages/([-_a-z0-9]{1,32})/$', message_views.message_thread),
这是消息模型:
class Message(models.Model):
from_user = models.ForeignKey(User, verbose_name='From', related_name='%(class)s_from_user')
to_user = models.ForeignKey(User, verbose_name='To', related_name='%(class)s_to_user')
send_time = models.DateTimeField('Send Time', blank=True)
msg_content = models.TextField('Message')
thread_id = models.CharField('Thread', max_length=50, blank=True)
class Meta:
permissions = (
('can_view_message', 'Can View Message'),
)
我使用 post_create 信号来分配权限:
def view_message(sender, instance, **kwargs):
assign_perm('can_view_message', instance.from_user, instance)
assign_perm('can_view_message', instance.to_user, instance)
post_save.connect(view_message, sender=Message, dispatch_uid="view_message_permission")
但是我收到以下错误,但不知道为什么:
GuardianError at /myapp/messages/13/
Argument pk was not passed into view function
Request Method: GET
Request URL: http://127.0.0.1:8000/myapp/messages/13/
Django Version: 1.8.4
Exception Type: GuardianError
Exception Value:
Argument pk was not passed into view function
Exception Location: /Library/Python/2.7/site-packages/guardian/decorators.py in _wrapped_view, line 111
Python Executable: /usr/bin/python
Python Version: 2.7.6
任何帮助将不胜感激,非常感谢!