微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Django:将具有ForeignKey关系的模型实例保存到数据库的问题

如何解决Django:将具有ForeignKey关系的模型实例保存到数据库的问题

我想使用Django创建和保存模型实例。 这些是我的模型:

class Customer(models.Model):
id = models.IntegerField(primary_key=True,unique=True)
user = models.OnetoOneField(User,on_delete=models.CASCADE)
first_name = models.CharField(max_length=255)
last_name = models.CharField(max_length=255)
...

class Order(models.Model):
    id = models.IntegerField(primary_key=True,unique=True)
    customer = models.ForeignKey(Customer,on_delete=models.CASCADE)
    comment = models.TextField()
...

我创建这样的订单:

def store_storage_space_order(cleaned_data):
    try:
        user = User.objects.create_user(
            cleaned_data["customer_email"],cleaned_data["customer_email"],1234
        )

    customer = Customer.objects.create(
        user=user,first_name=cleaned_data["customer_firstname"],last_name=cleaned_data["customer_lastname"],email=cleaned_data["customer_email"],phone_number=cleaned_data["customer_phone"]
    )

    StorageSpaceOrder.objects.create(
        customer=customer,order_price=Decimal(cleaned_data["order_price"])
    )

except Exception as exc:
    logger.exception("Couldn't store any order information",exc,cleaned_data)

据我了解,Django也会在调用create时保存对象。

尝试保存订单时,出现以下错误消息:

save() prohibited to prevent data loss due to unsaved related customer

我没有得到什么;客户已经在那里并保存在数据库中。两者之间的客户没有任何变化。

我也尝试过customer_id=customer.id/pk,-但是ID和PK都返回None。

这是为什么,我需要更改什么?再次加载对象不是首选方式,因为我只有将其标记为唯一的ID。

感谢您的输入:)

解决方法

ID字段必须由Django自动生成,因此您无需在模型中声明它们。

如果这样做,则将覆盖创建/保存此模型的实例时调用的默认行为。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。