假设我有两门课:
你知道吗表格.py你知道吗
class Device79table(tables.Table):
class Meta:
#link to datasource
model = Device79
attrs = {"class": "paleblue"}
你知道吗型号.py你知道吗
class Device79(models.Model):
# data for table
我有一个引用这两个类的函数。你知道吗
你知道吗视图.py你知道吗
def function():
#makes table of all objects in device 79
table = Device79table(Device79.objects.all())
table.draw()
有可能这样做吗?假设参数“device”=Device79
def function(device)
table = device+table(device.objects.all())
table.draw()
这样就可以根据设备的值来绘制表格。即设备可以是设备79、设备80、设备81等。。程序会自动绘制正确的表格。你知道吗
更新
这是一个新的解决方案,它考虑到了这样一个事实:您实际上并没有实例化类,而是直接使用类对象。你知道吗
因为
Device79
必须在Device79table.Meta
之前定义,所以不能告诉Device79
在它自己的定义中使用哪个表。你甚至不能在Device79table
期间这样做,因为它还不存在。你知道吗因此,您需要在定义相应的表之后告诉
Device79
使用哪个表。你知道吗如您所见,我也选择不使用动态变量名,而是在其他变量中使用一个明确定义的对象。动态变量名使代码更难阅读和维护。你知道吗
型号.py
表格.py
视图.py
通常,循环导入不是问题,只要您导入模块而不是单个对象,但是由于您需要在定义表的过程中直接访问模型,因此无法在
models.py
中导入表。这就是为什么我们改变tables.py
中的设备来告诉它使用哪个表,而不是直接在models.py
中设置它。你知道吗这样,我们保持导入链如下:
views -> tables -> models
和models
从不尝试导入tables
,但这也意味着我们必须至少在某处导入tables
一次才能完成模型定义。你知道吗这有点令人惊讶,但我想不出一个更干净更简单的方法来做这件事,而只处理类对象,而不是实例。你知道吗
我不知道
Device79table
是在哪里定义的,但我假设它是global
我的假定义是:
将其与您的功能结合起来:
globals()
函数返回所有全局对象的dict
,其中键是它们名称的字符串。所以globals()['Device79table']
和Device79table
是一样的Python在反射方面尤其出色。根据您的描述,以下是您可以做的示例:
在
models.py
中:在
tables.py
中:然后在
views.py
:或者:
相关问题 更多 >
编程相关推荐