在属性内部,我想知道调用它的是哪个模型。有办法吗
示例代码:
# Model One
class ServerOne(models.Model):
user = models.ForeignKey(User)
virtual_machine_server = models.ForeignKey(VirtualMachineServer)
# Model Two
class ServerTwo(models.Model):
virtual_machine_server = models.ForeignKey(VirtualMachineServer)
# Model Three
class VirtualMachineServer(models.Model):
@property
def virtual_machine(self):
# Execute the code based on which model
# is calling this property
return vm
ServerOne和ServerTwo都将VirtualMachineServer作为外键。我想在ServerOne或ServerTwo上调用VirtualMachineseServer的virtual_machine属性,并根据调用它的模型执行代码
例如:
server_one = ServerOne.objects.get(pk=1)
vm = server_one.virtual_machine_server.virtual_machine
server_two = ServerTwo.objects.get(pk=2)
vm = server_two.virtual_machine_server.virtual_machine
我尝试在ServerOne和ServerTwo中创建自定义管理器:
class ServerOneManager(models.Manager):
def get_query_set(self):
servers = super(ServerOneManager, self).get_query_set()
for server in servers:
server.virtual_machine_server.child_instance = vm
return servers
然后在virtual_machine属性中查找子_实例属性:
@property
def virtual_machine(self):
if not hasattr(self, "child_instance"):
raise InstanceIsNotSetException()
但它不起作用
注意:child_实例不在数据库中,它只是动态创建的属性
提前感谢您的帮助
如果只有一台服务器指向虚拟机服务器,则可以使用反向查找,例如使用related name.。因此,如果ServerOne的ForeignKey to VirtualMachine server具有相关名称
server_one
,而ServerTwo的ForeignKey具有server_two
,则可以按照ForeignKeys还自动具有通过附加后缀
_set
创建的相关名称,例如VirtualMachineServer.serverone_set.all()
或者,如果有多个对象具有指向VirtualMachineseServer的ForeignKey,那么您可以向
virtual_machine
添加一个参数,指定引用它的对象。然后你就可以采取相应的行动。例如:相关问题 更多 >
编程相关推荐