使用OneToOne关系字段保存Django模型返回的对象没有属性'id'错误

时间:2018-11-20 06:30:04

标签: django django-models

我已经在模型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关系的主键。

任何解决此问题的建议将不胜感激。

1 个答案:

答案 0 :(得分:0)

可能是您将OneToOneField设置为模型的主键。尝试删除primary_key = True,然后将另一个字段(uuid或整数)显式设置为pk,或者简单地允许模型设置自己的id。

  rel = models.OneToOneField(ModelA, on_delete=models.CASCADE)