【问题标题】:How create new object automatically after creating other object in django?在 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 对象自动编译。

我该怎么做?

感谢您的帮助!

【问题讨论】:

标签: django django-models


【解决方案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 中得到一个错误,我猜是因为在创建订单时这本书不是参数
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-18
  • 1970-01-01
  • 2020-02-27
相关资源
最近更新 更多