Python 有没有更好的方法来创建此模型?(Django)

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

我有一个模型可以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 = 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)