我在我的一个模型上覆盖了save方法:
def save(self, *args, **kwargs):
self.set_coords()
super(Post, self).save(*args, **kwargs)
def __unicode__(self):
return self.address
# set coordinates
def set_coords(self):
toFind = self.address + ', ' + self.city + ', ' + \
self.province + ', ' + self.postal
(place, location) = g.geocode(toFind)
self.lat = location[0]
self.lng = location[1]
但是,我只想在创建帖子时运行set_coords()
一次。在更新模型时,不应运行此功能。
我怎样才能做到这一点?有没有办法检测模型是否正在创建或更新?
答案 0 :(得分:27)
def save(self, *args, **kwargs):
if not self.pk:
self.set_coords()
super(Post, self).save(*args, **kwargs)
答案 1 :(得分:3)
我认为正确的方法是使用post_save信号:
def set_coords(sender, **kw):
model_instance = kw["instance"]
if kw["created"]:
toFind = model_instance.address + ', ' + model_instance.city + ', ' + \
model_instance.province + ', ' + model_instance.postal
(place, location) = g.geocode(toFind)
model_instance.lat = location[0]
model_instance.lng = location[1]
model_instance.save()
post_save.connect(set_coords, sender=MyModel)