Python 有没有更好的方法来创建此模型?(Django)
我有一个模型可以ping REST服务并保存结果Python 有没有更好的方法来创建此模型?(Django),python,django,django-models,Python,Django,Django Models,我有一个模型可以ping REST服务并保存结果 class StoreStatus(models.Model): store = models.OneToOneField(Store) status = models.TextField() def save(self, *args, **kwargs): self.status = get_store_information(self.store.code) self.pk = sel
class StoreStatus(models.Model):
store = models.OneToOneField(Store)
status = models.TextField()
def save(self, *args, **kwargs):
self.status = get_store_information(self.store.code)
self.pk = self.store.pk
super( StoreStatus, self ).save(*args, **kwargs)
我需要每一次重复运行一次,并认为我可以将它保存在一个视图中,因为“Store”对象在我的大多数视图中
有更好的方法吗?我必须手动设置pk,因为当我第二次尝试保存时,我会出现重复错误
看起来有点脏,我正在努力改进我的编码。
谢谢,看起来很糟糕
首先,将状态信息的检索与对象的保存相关联是一个相当糟糕的想法。如果“更新”是您在此模型上执行的唯一操作,那么更好的方法可能是编写一个“update()”方法,在状态更新后自动保存,而不是反过来执行
def update(self):
self.status = get_store_information(self.store.code)
self.save()
第二:如何创建此模型的第一个实例?如果每次更新模型时都试图保存一个新实例,则会出现复制错误。比如说,如果你做了这样的事情:
# this will crap out
update = Update(mystore)
update.save()
你应该做的是:
# this will work (provided we have 'update')
mystore.status.update()
或:
如果您足够懒,您可以始终将“update\u status”方法添加到存储模型中,并在那里执行创建/更新。对你正在做的事情要明确,这总是好的。记住:Django是基于最小意外的原则,你的代码也是如此!) 如果我是你,我会创建一个函数:
1.接受存储对象作为参数,
2.打剩下的电话,然后
3.收到响应后,更新StoreStatus中的状态 这将有助于实现松散耦合,这是涉及基于web的服务的体系结构所必需的。
此外,如果您只是想避免重复的PK错误,那么可以检查id以安全地循环更新并创建条件
def save(self, *args, **kwargs):
if self.id:
# Update case
pass
else:
# New object
# Process for the new object
pass
# Save the changes
super(StoreStatus, self).save(*args, **kwargs)
是否存在无法将此模型与您的
商店
模型合并的原因?
def save(self, *args, **kwargs):
if self.id:
# Update case
pass
else:
# New object
# Process for the new object
pass
# Save the changes
super(StoreStatus, self).save(*args, **kwargs)