Django 自动字段创建

问题描述 投票:0回答:1

有没有办法在创建外键模型时自动生成新字段

    class Metric(models.Model):
    name = CharField(null = True, blank = True, max_length = 200) 
    abbreviation = CharField(null = True, blank = True, max_length = 10)

    def __str__(self):
        try:
            return self.name
        except Exception as e:
            return str(e)
        
class Test(models.Model):
    name = CharField(null = True, blank = True, max_length = 200)
    metrics = ManyToManyField(Metric, null = True, blank = True)

    def __str__(self):
        try:
            return self.name
        except Exception as e:
            return str(e)
        
class TestVariable(models.Model):
    independent_variable = ForeignKey(Variable, null = True, blank = True,on_delete = models.CASCADE, related_name = "independent_variables")
    dependent_variable = ForeignKey(Variable, null = True, blank = True, on_delete = models.CASCADE, related_name = "dependent_variables")

    test = ForeignKey(Test, null = True, blank = True, on_delete = models.CASCADE)

    def __str__(self):
        try:
            return self.name
        except Exception as e:
            return str(e)
    

所以如果我创建了一个新的

Metric
,有没有办法自动添加一个字段到
TestVariable

例如,如果我为标准差创建了

Metric
,它会自动在
TestVariable
中创建一个字段来获取标准差的数值。

python django
1个回答
0
投票
from django.db import models
from django.contrib.postgres.fields import JSONField

class TestVariable(models.Model):
    independent_variable = models.ForeignKey(Variable, null=True, blank=True, on_delete=models.CASCADE, related_name="independent_variables")
    dependent_variable = models.ForeignKey(Variable, null=True, blank=True, on_delete=models.CASCADE, related_name="dependent_variables")
    test = models.ForeignKey(Test, null=True, blank=True, on_delete=models.CASCADE)
    metrics_data = JSONField(default=dict)  # This field can store metrics dynamically

    def __str__(self):
        return self.test.name if self.test.name else 'Unnamed TestVariable'

当您创建新的

Metric
时,您可以更新
metrics_data
TestVariable

字段
© www.soinside.com 2019 - 2024. All rights reserved.