我有一个Django应用程序,它的模型是OS (在“操作系统”中)。该模型有一些常用的字段,如name或version。这些字段对所有操作系统都是通用的。
我还有另外两个(相关的)模型,叫做Linux和Windows。它们有一些特定于操作系统的字段(Linux有一个desktop_environment,如"KDE“或"Gnome",apps_manager,如"apt",pacman等;Windows有一个built_in_antivirus字段,等等),这意味着这两个模型有完全不同的字段,这只对特定的操作系统有意义。
OS模型与Linux和Windows模型都有OneToOne关系,但这两个模型中只有一个实际存在(操作系统不能同时是Linux和Windows )。
如何创建某种“关系”、“属性”、“管理器”或XYZ属性,以便从OS模型的实例访问Linux和Windows字段?
示例:
a = OS.objects.get(pk=3) # This is a Windows instance
a.<magic>.built_in_antivirus
True
b = OS.objects.get(pk=14) # This is a Linux instance
b.<magic>.desktop_environment请注意,我不想将所有字段都移动到同一模型中。
发布于 2019-11-14 20:28:53
为此,您可以使用property。
你必须更改你的models.py
class OS(models.Model):“”您的OS型号“”#此处显示您的字段
@property
def magic_property(self):
''' Here is your magic property '''
if hasattr(self, 'linux_related_name'):
# This has Linux related model
return self.linux_related_name
if hasattr(self, 'windows_related_name'):
# This has Window related model
return self.windows_related_name
return None现在您可以使用obj.magic_property访问您的属性
https://stackoverflow.com/questions/58856553
复制相似问题