【发布时间】:2021-11-06 21:08:51
【问题描述】:
不确定我是否走错了路,但我想在我的 Django 模型中使用某种临时运行时变量/字段。目前我有这个:
class BioChemicalProperties(models.Model):
mw = models.FloatField(blank=True, null=True)
iep = models.FloatField(blank=True, null=True)
exco = models.FloatField(blank=True, null=True)
molar_exco = models.FloatField(blank=True, null=True)
e01 = models.FloatField(blank=True, null=True)
def get_protein(self):
aa_seq = self.ab.get_lc_protein()
aa_seq += self.ab.get_hc_protein()
return aa_seq
def calc_mw(self, aa_seq=None):
if not aa_seq:
aa_seq = self.get_protein()
analysed_seq = ProteinAnalysis(aa_seq)
self.mw = analysed_seq.molecular_weight() + 18.015
def calc_exco(self, aa_seq=None):
if not aa_seq:
aa_seq = self.get_protein()
analysed_seq = ProteinAnalysis(aa_seq)
self.exco = analysed_seq.molar_extinction_coefficient()[1]
#...more methods here...
def calc_all_bioprops(self, aa_seq=None):
if not aa_seq:
aa_seq = self.get_protein()
self.calc_mw(aa_seq)
self.calc_iep(aa_seq)
self.calc_molexco(aa_seq)
self.calc_e01(aa_seq)
aa_seq 变量是一个临时值,不应存储在数据库中。尽管如此,当要使用多种方法时,为了不重新计算每种方法的值,我想有选择地将其作为参数提供。我看到在每个方法中将aa_seq 作为参数是多余的,也不是面向对象的。现在我想知道将它存储为类属性是否是一个好主意(并且可能),例如:
class BioChemicalProperties(models.Model):
mw = models.FloatField(blank=True, null=True)
iep = models.FloatField(blank=True, null=True)
exco = models.FloatField(blank=True, null=True)
molar_exco = models.FloatField(blank=True, null=True)
e01 = models.FloatField(blank=True, null=True)
aa_seq = ""
def calc_mw(self):
if not self.aa_seq:
self.aa_seq = self.get_protein()
analysed_seq = ProteinAnalysis(self.aa_seq)
self.mw = analysed_seq.molecular_weight() + 18.015
但是,我还没有发现任何类似的模型字段和非模型字段混合的例子......这是有原因的吗?
【问题讨论】:
标签: python django django-models django-queryset