我有这样的代码(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()应该自动更新外键,但必须有一个很好的理由为什么它不会。
答案 0 :(得分:3)
按self.order = Order()
生成订单时,如果您调用订单的save
方法,则不会将ID设置为原样。因此,order_id
对象的Peon
字段设置为无。
如果您的所有订单字段都是可选字段,则可以执行self.order = Order.objects.create()
之类的操作,然后正确设置ID。
否则你需要做类似
的事情def save(self, *args, **kwargs):
if self.order_id is None:
order = Order()
#edit self.order's fields appropriately
order.generate(...)
self.order = order
else:
#edit self.order's fields appropriately
self.order.generate(...)
self.order.save()
super(Peon, self).save(*args, **kwargs)
如果order.generate
当然不需要后向关系。