Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django为任意对象的\u update()选择\u_Python_Django_Django Models - Fatal编程技术网

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)