Django模型,保存多个值的最佳方法?

时间:2015-10-07 09:23:23

标签: django django-models

我需要为同一个外键保存多个值。让我举个例子:

class SaveMoz(models.Model):

    keyword = models.ForeignKey(KW)    
    m1 = ?    
    m2 = ?
    m3 = ? 
    m4 = ?

这些字段中的每一个应该代表分析的URL(通过moz api),我想存储多个值。这是我要保存的输出:

[{u'pda': 53.2342343456775, u'upa': 23.45324234235234}, # These 2 would need to go to #m1
 {u'pda': 58.26193857945012, u'upa': 36.56733779379807}, # These 2 into #m2
 {u'pda': 66.15243480785065, u'upa': 35.377615927279244}, #m3
 {u'pda': 42.8651222137307, u'upa': 20.487826402597264}, #m4
]

我只为每个字段提供了2个值(pda,upa)作为示例,我将使用5(并非所有输入同时进行)。

存储这些产品的最佳方式是什么? MultiValueField?把它保存为json? 我稍后需要调用这些值来执行不同的计算。

2 个答案:

答案 0 :(得分:2)

使用through table,可以为关系添加额外的上下文。

class UrlData(models.Model):
    pda = models.FloatField()
    upa = models.FloatField()

class SaveMozData(models.Model):
    savemoz = models.ForeignKey('SaveMoz')
    kw = models.ForeignKey(KW)
    data = models.ManyToManyField(UrlData)

class SaveMoz(models.Model):
    keyword = models.ManyToManyField(KW,
                        through='SaveMozData',
                        through_fields=('savemoz','kw'))

答案 1 :(得分:1)

创建一个代表数据的单独模型/类

class GoodNameForM(models.Model):
    moz = models.ForeignKey(SaveMoz)
    pda = DecimalField()
    upa = DecimalField()

请务必提供代表他们的字段名称

您可以在SaveMoz上通过

引用这些内容
save_moz_instance.goodnameform_set.all()