Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何为相关对象创建自定义管理器?_Python_Django_Django Models - Fatal编程技术网

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

Python 如何为相关对象创建自定义管理器?,python,django,django-models,Python,Django,Django Models,我有这些相关的模型,其中一个有一个自定义管理器 class Device(Model): name = CharField() class DeviceSettingManager(Manager): use_for_related_fields = True class Setting(Model): name = CharField() value = CharField() device = ForeignKey(Device, related_

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

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 类别设备(型号): name=CharField() 类设备设置管理器(管理器): 将\u用于与\u相关的\u字段=True 班级设置(模式): name=CharField() value=CharField() 设备=外键(设备,相关的\u name='settings') 对象=设备设置管理器 但是当我运行Django shell时,我看到正在使用“RelatedManager”管理器

>>> d = Device.objects.all()[0] >>> type(d.settings) django.db.models.fields.related.create_foreign_related_manager..RelatedManager >>>d=设备.objects.all()[0] >>>类型(d.设置) django.db.models.fields.related.create\u foreign\u related\u manager..RelatedManager
如何使DeviceSettingManager用于设备设置?

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

class DeviceSettingManager(models.Manager):
    use_for_related_fields = True

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

>>> d = Device.objects.all()[0]
>>> d.settings.manager_status()
Device Setting Manager is Active
即使将管理器显式传递给相关对象,如:

>> d.settings(manager="settings_objects")
当然:

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

    settings_objects = DeviceSettingManager() # Notice the parenthesis
管理器的
仍将显示为:
django.db.models.fields.related\u描述符。创建多对一管理器..RelatedManager


不要介意
类的名称。

不起作用。当我尝试调用管理器方法时,我得到了
AttributeError:'RelatedManager'对象没有属性
错误。