gpt4 book ai didi

python - 如何从通过 PolymorphicChildModelAdmin 创建的表单中排除字段

转载 作者:太空狗 更新时间:2023-10-30 01:37:29 26 4
gpt4 key购买 nike

尝试使用 Polymorphic 和其他插件 我想知道如何防止某些基类字段显示在子管理界面的表单中。为我的 child 类(class)准备这个 adminy.py:

from django.contrib import admin
from .models import *
from partsmanagement.models import Part
from polymorphic.admin import PolymorphicParentModelAdmin, PolymorphicChildModelAdmin

admin.site.register(Book)

class BookAdmin(PolymorphicChildModelAdmin):
base_model = Part

和基本模型的 admin.py:

# -*- coding: utf-8 -*-

from django.contrib import admin
from .models import *
from polymorphic.admin import PolymorphicParentModelAdmin, PolymorphicChildModelAdmin
from bookcollection.models import Book
from bookcollection.admin import BookAdmin

admin.site.register(Part)

class PartAdmin(PolymorphicParentModelAdmin):
base_model = 'Part'
child_models = (
(Book, BookAdmin),
)

现在 admin 中的表单显示了基类和子类的所有字段。我试图为子类添加 exclude = list() 但这没有用(没有变化)。

最佳答案

过滤类(相当于python的isinstance()):

>>> ModelA.objects.instance_of(ModelB)
.
[ <ModelB: id 2, field1 (CharField), field2 (CharField)>,
<ModelC: id 3, field1 (CharField), field2 (CharField), field3 (CharField)> ]

一般来说,包括或排除部分继承树:

ModelA.objects.instance_of(ModelB [, ModelC ...])
ModelA.objects.not_instance_of(ModelB [, ModelC ...])

您也可以在 Q-objects 中使用此功能(与上述结果相同):

>>> ModelA.objects.filter( Q(instance_of=ModelB) )

多态过滤(针对派生类中的字段)

例如,使用 Q 对象从继承树中任意位置的多个派生类中挑选对象(语法:准确的模型名称 + 三个 _ + 字段名称):

>>> ModelA.objects.filter(  Q(ModelB___field2 = 'B2') | Q(ModelC___field3 = 'C3')  )
.
[ <ModelB: id 2, field1 (CharField), field2 (CharField)>,
<ModelC: id 3, field1 (CharField), field2 (CharField), field3 (CharField)> ]

组合查询集

查询集现在可以被视为允许不同对象类型聚合的对象容器,非常类似于 python 列表 - 只要通过公共(public)基类的管理器访问对象即可:

>>> Base.objects.instance_of(ModelX) | Base.objects.instance_of(ModelY)
.
[ <ModelX: id 1, field_x (CharField)>,
<ModelY: id 2, field_y (CharField)> ]

关于python - 如何从通过 PolymorphicChildModelAdmin 创建的表单中排除字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36867643/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com