我想要自动更新和读取对象的功能。例如,下面的update()顶部的first()之类的东西:
obj = MyModel.objects.filter(pk = 100).update(counter = F('counter')+1).first()
我知道这很尴尬。但是只是想表达我的需求。
为了记录,我使用了类似的类方法:
@classmethod
def update_counter(cls, job_id):
with transaction.atomic():
job = (cls.objects.select_for_update().get(pk=job_id))
job.counter += 1
job.save()
return job
我将在以下位置调用并获取更新的obj。
my_obj = my_obj.update_counter()
但是问题是,给定的这种回读是否还有其他的django模型技术很普遍,并且可能被多个线程用于基于例如最终计数得出结论。
答案 0 :(得分:0)
深入挖掘,我找不到任何直接方法来获取要以sql链式方式更新的对象。正如Dani Herrera所说,更新和读取必须是两个sql查询。因此,唯一可以帮助我满足该要求的机制就是我上面也包含的类方法。实际上,它可以帮助我将来在同一类方法中自动添加其他字段更新。
例如,方法很可能是“ def update_progress(job_id,final_desired_count)”,在这里我可以更新更多字段,例如“ self.progress_percentage =(self.counter / final_desired_count)* 100”。
对我来说,使用类方法可能是一项不错的投资。