查询不同于为ManyToMany字段选项返回的字段

时间:2018-02-18 10:03:06

标签: python django django-models django-queryset

我是Django的新手并且遇到了我正在努力修复的问题。在我的应用程序中,我有一个模型资产,它有来自AFF的多选答案。这是代码:

class Rtype(models.Model):
    rtype_name = models.CharField(max_length=10, verbose_name="Type", default = "")
    rtype_score = models.CharField(max_length=10, verbose_name="Score", default = "")

    def __str__(self):
        return self.rtype_name


class AFF(models.Model):
    ff = models.CharField(max_length=100, verbose_name="FF", default = "")
    ff_score = models.ForeignKey(Rtype, on_delete=models.CASCADE, blank=True, null=True, verbose_name="Score", default = "")

    def __str__(self):
        return self.ff

class Asset(models.Model):
        fjam = models.ManyToManyField(AFF, verbose_name="Fjam", default = "", blank=True)

    def __str__(self):
        return self.fjam

我们假设数据库中有以下条目:

rtype_name =严重

rtype_score = 5

rtype_name = Medium

rtype_score = 3

ff =直接

ff_score =严重

ff =间接

ff_score =中等

如果用户在“资产”表单中选择“直接”和“间接”,如何通过在Rtype中保留返回self.rtype_name来提交表单而不是rtype_names,从而在数据库中保存3 + 5(对于向用户显示名称而不是得分)。

1 个答案:

答案 0 :(得分:0)

我一直试图找出你想要的东西,然后失败。

您的资产模型与AFF有m2m关系;当用户选择Direct和Indirect时将保存在数据库中的东西将是具有那些ff值的AFF项的主键。您可以通过跟踪每个项目的RType的外键来获得分数。例如:

for aff in my_asset.fjam.all():
    print(aff.ff, aff.ff_score.rtype_score)

(您可以考虑为您的字段提供更具描述性和相关性的名称。)