我已经在模型b和模型a中定义了OneToOne关系。当我尝试保存模型b时,出现“模型B:对象没有属性'id'”错误。如何解决这个问题?我在这里想念什么。
型号:
class ModelA:
invoicedate = models.DateTimeField(blank=True)
amount = models.DecimalField(max_digits=12, decimal_places=2)
status = models.CharField(max_length=20, default='ACTIVE')
class Meta:
db_table = "modela"
class ModelB:
rel = models.OneToOneField(ModelA, on_delete=models.CASCADE, primary_key=True)
field1 ...
class Meta:
db_table = "modelb"
将数据插入模型的方法:
@transaction.atomic
def methodToInsertData(args):
new_modela = ModelA(
"invoicedate" = "2018-11-05",
"amount" = 5000,
"status" = "ACTIVE"
)
new_modela.save()
new_modelb = ModelB(
rel = new_modela,
...
)
new_modelb.save() #This statement throws "object has no attribute id" error
ModelA将自动创建id作为主键,而Model B将没有id作为主键,而rel字段将是与Model A具有OneToOne关系的主键。
任何解决此问题的建议将不胜感激。
答案 0 :(得分:0)
可能是您将OneToOneField设置为模型的主键。尝试删除primary_key = True,然后将另一个字段(uuid或整数)显式设置为pk,或者简单地允许模型设置自己的id。
rel = models.OneToOneField(ModelA, on_delete=models.CASCADE)