Django模型:名称的属性名称分配仅由数字不同

时间:2018-05-04 18:26:19

标签: python django

我有这个模型(其目的是保存数据):

class UserPhraseDatum(models.Model):
    result_from = models.ForeignKey(Results, related_name="data")
    phrase = models.ForeignKey(Sound)
    score = models.DecimalField(max_digits=5, decimal_places=4)
    snr = models.PositiveSmallIntegerField()
    m_energy_1 = models.PositiveSmallIntegerField() 
    m_energy_2 = models.PositiveSmallIntegerField()
    m_energy_3 = models.PositiveSmallIntegerField()
    m_energy_4 = models.PositiveSmallIntegerField()
    m_energy_5 = models.PositiveSmallIntegerField()
    m_energy_6 = models.PositiveSmallIntegerField()
    m_energy_7 = models.PositiveSmallIntegerField()
    u_energy_1 = models.PositiveSmallIntegerField()
    u_energy_2 = models.PositiveSmallIntegerField()
    u_energy_3 = models.PositiveSmallIntegerField()
    u_energy_4 = models.PositiveSmallIntegerField()
    u_energy_5 = models.PositiveSmallIntegerField()
    u_energy_6 = models.PositiveSmallIntegerField()
    u_energy_7 = models.PositiveSmallIntegerField()

最终,这些实例中的信息将在R中进行分析,并可能吐出为CSV。 总是m_energy的6个条目和u_energy的6个条目。是否有更好的方法来分配这些?

2 个答案:

答案 0 :(得分:0)

如果你正在使用postgreSQL,你应该参考ArrayField here

您的用例将是,而不是:

u_energy_* = models.PositiveSmallIntegerField()

你可以这样做:

u_energies = ArrayField(size=6, models.PositiveSmallIntegerField())

如果您真的无法迁移到postgres,那么我建议您在执行事务时使用TextField并解析数据。这可以在扩展models.TextField的类中处理,但这种方式肯定更加特殊,容易出错。

答案 1 :(得分:0)

您还可以使用反向ForeignKey关系。您需要创建其他模型:

class m_energy(models.Model):
     content_field = '''some content'''
     UserPhraseDatum = models.ForeignKey('UserPhraseDatum', related_name = 'm_energies')

u_energy是一样的。

在您的查询中,您可以通过以下方式m_energy

var = UserPhraseDatum.objects.filter(m_energies__content_field )