【发布时间】:2022-12-17 09:51:00
【问题描述】:
在PersonAdmin():中,我用select_for_update()覆盖了response_add(),这样就不会出现write skew,那么只能添加2个人添加人员并覆盖save_model()以便obj.save()仅在更改人员时有效换人如下所示:
# "store/admin.py"
from django.contrib import admin
from .models import Person
@admin.register(Person)
class PersonAdmin(admin.ModelAdmin):
def response_add(self, request, obj, post_url_continue=None):
# Here
obj_count = super().get_queryset(request).select_for_update().all().count()
if obj_count < 2:
obj.save()
return super().response_add(request, obj, post_url_continue)
def save_model(self, request, obj, form, change):
last_part_of_path = request.path.split('/')[-2]
if last_part_of_path == "change":
obj.save() # Here
但是,当添加一个人时添加人员如下所示:
SELECT 代替 SELECT FOR UPDATE 运行,如下所示。 *我用数据库下面的这些日志是PostgreSQL 的查询你可以查看On PostgreSQL, how to log queries with transaction queries such as "BEGIN" and "COMMIT":
那么,在添加人员时如何运行SELECT FOR UPDATE而不是SELECT添加人员?
【问题讨论】:
标签: python python-3.x django django-admin select-for-update