Python Django为任意对象的\u update()选择\u
我想对类型可能不同的对象进行原子更新。结构看起来像这样:Python Django为任意对象的\u update()选择\u,python,django,django-models,Python,Django,Django Models,我想对类型可能不同的对象进行原子更新。结构看起来像这样: 类MyMixin(models.Model): size=models.BigIntegerField(null=False,默认值=0) 类子类(MyMixin,models.Model): 类子类B(MyMixin,models.Model): #obj属于子类A或子类B类型 定义某些函数(obj): 使用db.transaction.atomic(): #obj=subassa.objects.select_for_update()
类MyMixin(models.Model):
size=models.BigIntegerField(null=False,默认值=0)
类子类(MyMixin,models.Model):
类子类B(MyMixin,models.Model):
#obj属于子类A或子类B类型
定义某些函数(obj):
使用db.transaction.atomic():
#obj=subassa.objects.select_for_update().get(id=obj.id)#如何执行此操作?
obj.size=计算()
obj.save()
我能找到的所有示例都显式地使用了.objects.select\u for\u update()
模式,但我的问题是我不知道在运行时类是什么。在我的代码中,我已经有了一个对象/模型的实例,但我需要从数据库中重新获取它以锁定它
我试图从本指南中的“悲观主义方法”中得出一些想法-
我是否应该在
MyMixin
中使用一个非常简单的方法来设置和保存大小
?或者我可以在运行时显式地检查obj
的type
,并拥有一堆elif
s(执行类似if/elif-type(obj)==subassa:subassa.objects的操作。选择_for_update()…
)但这既难看又不易维护。您总是可以从对象的\uuuu class\uuuu
属性中获取对象的类。因此:
obj = obj.__class__.objects.select_for_update().get(id=obj.id)
您始终可以从对象的
\uuuu class\uuu
属性中获取对象的类。因此:
obj = obj.__class__.objects.select_for_update().get(id=obj.id)