如何为相关对象创建自定义管理器?

2024-10-03 15:21:10 发布

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

我有这些相关的模型和一个有一个自定义管理器

class Device(Model):
    name = CharField()

class DeviceSettingManager(Manager):
    use_for_related_fields = True

class Setting(Model):
    name = CharField()
    value = CharField()
    device = ForeignKey(Device, related_name='settings')

    objects = DeviceSettingManager

但是当我运行djangoshell时,我看到“RelatedManager”管理器正在被使用

^{pr2}$

如何让设备设置管理器用于设备的设置?在


Tags: name模型truefields管理器formodeluse
1条回答
网友
1楼 · 发布于 2024-10-03 15:21:10

不要在意在管理器上调用type()的结果,DeviceSettingManager实际上正在使用中。您可以通过执行以下操作来检查:

class DeviceSettingManager(models.Manager):
    use_for_related_fields = True

    def manager_status(self):
        print("Device Setting Manager is Active")

打电话给:

^{pr2}$

即使您显式地将管理器传递给相关对象,例如:

>> d.settings(manager="settings_objects")

当然还有:

class Setting(Model):
    name = CharField()
    value = CharField()
    device = ForeignKey(Device, related_name='settings')

    settings_objects = DeviceSettingManager() # Notice the parenthesis

管理器的class仍将显示为:django.db.models.fields.related_descriptors.create_reverse_many_to_one_manager.<locals>.RelatedManager

别管class的名字。在

相关问题 更多 >