Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django:如何使用相关模型自动填充字段';s场_Python_Django - Fatal编程技术网

Python Django:如何使用相关模型自动填充字段';s场

Python Django:如何使用相关模型自动填充字段';s场,python,django,Python,Django,我有两个基本模型: class ModelA(models.model): ... #some fields score = models.IntegerField() class ModelB(models.model) ... #some fields related_model=models.OneToOneField(ModelA) score = models.IntegerField(default=related_model.score)

我有两个基本模型:

class ModelA(models.model):
    ... #some fields
    score = models.IntegerField()

class ModelB(models.model)
    ... #some fields
    related_model=models.OneToOneField(ModelA)
    score = models.IntegerField(default=related_model.score)
我想要的是,在创建ModelB时,它的score字段填充ModelA的score值,它与ModelA有一个OneToOne关系

我尝试设置
score=models.IntegerField(默认值=related\u model.score)
但在迁移时,我得到了错误:
AttributeError:'OneToOneField'对象没有属性“score”

我还尝试在ModelB下定义一个方法,如下所示,并将其传递给默认值:

def get_score(self, *args, **kwargs):
    return self.threat.score
这也不行。 当我设置
default=get_score()
时,我得到一个错误:
缺少一个必需的位置参数:self


如何将模型的字段自动设置为其相关模型(通过OneTONE关系)字段的字段?

您应该在保存时执行此操作

def save(self, *args, **kwargs):
    if not self.score:
        self.score = self.threat.score
    return super().save(*args, **kwargs)

您可以使用
pre_save
信号来完成此操作。@Stevy我有一种预感,一定有一种简单的方法来完成此操作:/
makemigration
阶段已通过。但是,当我通过管理面板设置相关模型并将分数留空并按下保存按钮时,我得到错误
此字段为必填。
您需要将其设置为
blank=True,null=True