次のようなコードがあります(Django 1.4.3):
class Peon(models.Model)
# ...
order = models.ForeignKey(Order, db_column='idOrder')
# ...
def save(self, *args, **kwargs):
if self.order_id is None:
self.order = Order()
#edit self.order's fields appropriately
self.order.generate(...)
self.order.save()
super(Peon, self).save(*args, **kwargs)
super().save() は、注文が存在しないと不平を言います。
つまり、self.order.pk が設定されていても、self.order_id は None のままであり、これにより自分自身を保存できません。
私の修正は、super().save() を呼び出す前にこれを行うことでした:
self.order_id = self.order.pk
私の質問は、なぜこれが必要なのですか?self.order.save() は自動的に外部キーを更新するはずですが、そうしないのには十分な理由があるはずです。