在 django 中创建其他对象后如何自动创建新对象?

Posted

技术标签:

【中文标题】在 django 中创建其他对象后如何自动创建新对象?【英文标题】:How create new object automatically after creating other object in django? 【发布时间】:2015-03-31 15:02:18 【问题描述】:

例如,我有两个班级。

class Book(models.Model):
    title = models.CharField (...)    
    author = models.CharField (...)
    price = models.Integer(...)

class Order(models.Model)
    order_datetime = models.DateTimeField()
    order_book = models.ForeignKey(Book,....)

在数据库中每次添加新的 Book 对象后,应自动创建新的 Order 对象。并且 order_book 字段应该使用相应的 book 对象自动编译。

我该怎么做?

感谢您的帮助!

【问题讨论】:

Can Django automatically create a related one-to-one model?的可能重复 【参考方案1】:

你可以重写 Book 的保存方法:

class Book(models.Model):
    title = models.CharField (...)    
    author = models.CharField (...)
    price = models.Integer(...)

    def save(self, *args, **kwargs):
        is_new = True if not self.id else False
        super(Book, self).save(*args, **kwargs)
        if is_new:
            order = Order(order_book=self)
            order.save()

如果应该填写插入时间,您也可以将 auto_now_add=True 添加到 order_datetime:

order_datetime = models.DateTimeField(auto_now_add=True)

【讨论】:

非常感谢,尼玛!我会尝试使用它。 这一行我看不懂``` is_new = True if not self.id else False 在调用 super 之前,您需要决定是否第一次保存 Book,因为无论如何它都会有一个 id。 当我尝试这样做时,我在 order_book 中得到一个错误,我猜是因为在创建订单时这本书不是参数

以上是关于在 django 中创建其他对象后如何自动创建新对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Django 中创建自动递增整数字段?

在 django 中创建原子事务是不是会自动创建锁

Linux中创建Django项目

如何在 Django 中创建用于编辑的填充表单

我可以在没有自动 ID 的情况下在 Django 中创建模型吗?

如何在 Django 中创建团队负责人/组负责人?