我在摇尾管理ModelAdmin中添加了一个家族树管理器,其结构如下所示:
Clients/
Management
Family Tree/
Person/因此,我需要确保每个族谱和每个人(家族成员)只对输入数据的用户(和管理员)可用。
这是我第一次和wagtail在一起,我只是读了一些文档,但是任何建议都是欢迎的:)
发布于 2019-01-24 09:55:02
对模型管理视图的筛选
在ModelAdmin类上,应该定义get_queryset以根据需要筛选列表视图中显示的项。
但是它不会显示这些项,用户仍然可以通过修改URL来访问其他项。为了防止这种情况,您需要定义一个permission_helper_class,并将user_can_inspect、user_can_create、user_can_edit和user_can_delete 方法设置为相应地返回True/False。
将用户分配给创建的对象
根据下面的评论,让我们假设您有以下模型定义:
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。
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字段,它将失败。
然后在您的模型管理上设置此视图:
from wagtail.contrib.modeladmin.options import ModelAdmin
from myviews import FamilyTreeCreateView
class FamilyTreeAdmin(ModelAdmin):
create_view_class = FamilyTreeCreateViewhttps://stackoverflow.com/questions/54339313
复制相似问题