使模型字段在Django中等于两个字段的串联

时间:2016-01-12 21:51:08

标签: python django django-models

我有两个模型,想要为第二个类创建一个字段,它是外部字段和模型中字段的串联。

我到目前为止的代码是:

class Drug(models.Model):
    drug_name = models.CharField("Drug Name", max_length=200)
    reference_title = models.CharField("Publication Title",max_length=1024)
    pub_date = models.DateField("Pubication Date",'date published')
    pubmed_link = models.CharField("PubMed Link", max_length=300)

class Risk(models.Model):
    drug_link = models.ForeignKey(Drug, on_delete=models.CASCADE)    
    dosage = models.IntegerField(default=0)
    independent_risk = models.DecimalField("Individual Risk", max_digits=4, decimal_places=2)

我想在Risk模型中添加一个新字段,该字段由drug_link的选定值和输入的剂量值的串联自动填充。

2 个答案:

答案 0 :(得分:3)

这可以通过课堂上的python property来完成:

class Risk(models.Model):
    drug_link = models.ForeignKey(Drug, on_delete=models.CASCADE)    
    dosage = models.IntegerField(default=0)
    independent_risk = models.DecimalField("Individual Risk", max_digits=4, decimal_places=2)

    @property
    def name_dosage(self):
         return "%s - %s" % ( self.drug_link.drug_name, self.dosage )

答案 1 :(得分:1)

如果您不需要将此值存储在数据库中,而是在模板中使用它,则无需创建额外的字段。你可以使用这样的方法:

class Risk(models.Model):
    drug_link = models.ForeignKey(Drug, on_delete=models.CASCADE)    
    dosage = models.IntegerField(default=0)
    independent_risk = models.DecimalField("Individual Risk", max_digits=4, decimal_places=2)

    def dosages(self):
        return "{} - {}".format(self.drug_link.drug_name, self.dosage) 

在模板中,您可以这样做:

{% for risk in risks %}
    {{ risk.dosage }}
{% endfor %}