首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有一种方法可以让每个用户的数据在摇尾模型管理中可见?

是否有一种方法可以让每个用户的数据在摇尾模型管理中可见?
EN

Stack Overflow用户
提问于 2019-01-24 04:22:01
回答 1查看 729关注 0票数 1

我在摇尾管理ModelAdmin中添加了一个家族树管理器,其结构如下所示:

代码语言:javascript
复制
Clients/
    Management
    Family Tree/
        Person/

因此,我需要确保每个族谱和每个人(家族成员)只对输入数据的用户(和管理员)可用。

这是我第一次和wagtail在一起,我只是读了一些文档,但是任何建议都是欢迎的:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-24 09:55:02

对模型管理视图的筛选

在ModelAdmin类上,应该定义get_queryset以根据需要筛选列表视图中显示的项。

但是它不会显示这些项,用户仍然可以通过修改URL来访问其他项。为了防止这种情况,您需要定义一个permission_helper_class,并将user_can_inspectuser_can_createuser_can_edituser_can_delete 方法设置为相应地返回True/False。

将用户分配给创建的对象

根据下面的评论,让我们假设您有以下模型定义:

代码语言:javascript
复制
from django.conf import settings
from django.db import models

class FamilyTree(models.Model):
    managed_by = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, null=False)
    # Some other fields.

注意,如果数据库中已经有一些条目,null=False将失败。如果是这样的话,您必须创建一些http://andrearobertson.com/blog/2017/11/26/django-example-adding-a-new-non-nullable-foreign-key/

为了分配用户使用对象本身创建对象,您必须使用自定义管理器对模型管理进行CreateView

代码语言:javascript
复制
from django.forms.widgets import HiddenInput
from wagtail.contrib.modeladmin.views import CreateView

class FamilyTreeCreateView(CreateView):
    def get_form(self):
        form = super().get_form()
        form.fields['managed_by'].widget = HiddenInput()
        return form

    def get_form_kwargs(self):
        kwargs = super().get_form_kwargs()
        kwargs['data']['managed_by'] = self.request.user  # Add the data so the form validates properly.
        return kwargs

请注意,这样,它将输出一个隐藏的managed_by表单字段,稍后将其设置为正确的值。如果这对您来说是个问题,那么您必须使用http://docs.wagtail.io/en/v2.4/reference/contrib/modeladmin/create_edit_delete_views.html#modeladmin-form-fields-exclude,然后覆盖form_valid方法。我选择不这样做,因为您必须完全覆盖该方法(经验表明,Wagtail的给定更新将与您复制的实现不同,您不会注意到),而不仅仅是覆盖/扩展它,因为初始方法调用form.save(),如果缺少所需的managed_by字段,它将失败。

然后在您的模型管理上设置此视图:

代码语言:javascript
复制
from wagtail.contrib.modeladmin.options import ModelAdmin
from myviews import FamilyTreeCreateView

class FamilyTreeAdmin(ModelAdmin):
    create_view_class = FamilyTreeCreateView
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54339313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档