如何从通过polymicChildModelAdmin创建的窗体中排除字段

2024-10-04 11:31:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道如何防止一些基类字段在formforchild管理接口中显示出来。有这个吗管理.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

还有这个管理员py对于基本型号:

^{pr2}$

现在,admin内部的表单显示基类和子类的所有文件。我试图为子类添加exclude=list(),但这没用(没有改变)。在


Tags: djangofrompyimportadminmodels孩子contrib
1条回答
网友
1楼 · 发布于 2024-10-04 11:31:44

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

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

通常,包括或排除继承树的部分:

^{pr2}$

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

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

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

例如,cherrypicking对象来自继承树中任意位置的多个派生类,使用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)> ]

组合查询集

QuerySet现在可以被视为对象容器,它允许聚合不同的对象类型,非常类似于python列表—只要对象是通过公共基类的管理器访问的:

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

相关问题 更多 >