我是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(对于向用户显示名称而不是得分)。
答案 0 :(得分:0)
我一直试图找出你想要的东西,然后失败。
您的资产模型与AFF有m2m关系;当用户选择Direct和Indirect时将保存在数据库中的东西将是具有那些ff值的AFF项的主键。您可以通过跟踪每个项目的RType的外键来获得分数。例如:
for aff in my_asset.fjam.all():
print(aff.ff, aff.ff_score.rtype_score)
(您可以考虑为您的字段提供更具描述性和相关性的名称。)