Django:创建模型时如何更新相关模型字段

Django:创建模型时如何更新相关模型字段,django,django-models,Django,Django Models,Django 1.11 我有多个型号具有与status相同的字段,例如repairOrder、statusUpdate,它们与status一样具有里程表字段。当用户创建新的statusupdate或repairOrder时,我希望它也更新状态模型中的某些字段。在我看来,有四种选择 在statusupdate上重写save()方法 ,可以查询相关模型和更新字段 模型上调用相关模型的方法 在我想要的地方更新 为了使示例更简单,我删除了一些字段 class Status(models.Model):

Django 1.11

我有多个型号具有与
status
相同的字段,例如repairOrder、statusUpdate,它们与status一样具有里程表字段。当用户创建新的statusupdate或repairOrder时,我希望它也更新状态模型中的某些字段。在我看来,有四种选择

  • 在statusupdate上重写save()方法
  • ,可以查询相关模型和更新字段
  • 模型上调用相关模型的方法 在我想要的地方更新
  • 为了使示例更简单,我删除了一些字段

    class Status(models.Model):
         odometer = models.IntegerField()
         vehicle = models.ForeignKey(Vehicle, on_delete=models.CASCADE)
         ...
    
    class statusUpdate(models.Model):
         odometer = models.IntegerField()
         vehicle = models.ForeignKey(Vehicle, on_delete=models.CASCADE)
         ...
    
    当用户创建一个新的StatusUpdate时,我希望里程表的状态也被设置

    Q:Django更新相关模型字段的方法是什么


    编辑:编辑了大量问题以澄清问题

    不需要状态更新中的里程表字段,因为您已经拥有状态模型的外键,因此可以访问状态模型的每个字段。只需从statusmodel中删除里程表,然后在用户执行statusupdate时更新里程表字段

    status_update_instance.odometer = some value
    status_update.save()
    

    以上是statusupdate模型的一个实例

    实际上所有的方法都是好的,都有各自的优缺点

    如果这些模型在不同的应用程序中,并且大部分是独立的,那么信号是很酷的。它的好处是,在正常情况下,它不会打扰你,你会有更多的控制权

    通过重写save()方法来实现这一点是个好主意,但如果您不必每次都这样做,或者大部分时间都这样做,但是在非常特定的时间,请创建一个不同的方法,通过该方法,您可以调用save()方法,同时还可以执行其他任何您想要的操作。这里的好处是,您可以设置尽可能多的条件,尝试捕获异常和if-else条件,这样不会影响save方法


    你必须找到最适合情况需要的东西。根据我自己的经验和人们所说的,在必要之前不要使用信号。

    对于第一个评论,给出的答案也适用于此。对于第二个注释,您可以继承模型,但如果您希望自动更新,则必须重写save方法,或者必须创建自定义模型maanger。覆盖保存方法将更容易。从里程表id中筛选,然后按日期排序(如果有),然后选择第二个索引。只要简单或即使你保持里程表现场解决方案可以应用。您仍然可以像上面提到的那样更新字段