首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建一个类似于联盟的相关模型

问创建一个类似于联盟的相关模型
EN

Stack Overflow用户
提问于 2019-11-14 20:14:29
回答 1查看 23关注 0票数 0

我有一个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字段?

示例:

代码语言:javascript
复制
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

请注意,我不想将所有字段都移动到同一模型中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-14 20:28:53

为此,您可以使用property。

你必须更改你的models.py

class OS(models.Model):“”您的OS型号“”#此处显示您的字段

代码语言:javascript
复制
@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访问您的属性

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58856553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档