Как выполнить "SELECT FOR UPDATE" вместо "SELECT" при добавлении данных в Django Admin?

В PersonAdmin(): ниже, Я отменил ответ_добавить() с выбрать_для_обновления() так что перекос записи не происходит, тогда только 2 человек могут быть добавлены на Add person и отменено save_model() так, что obj.save() работает только при смене человека на Change person:

# "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

Но, при добавлении человека на Add person как показано ниже:

enter image description here

SELECT выполняется вместо SELECT FOR UPDATE, как показано ниже. * Я использую PostgreSQL и эти журналы ниже являются запросами PostgreSQL и вы можете проверить В PostgreSQL, как регистрировать запросы с транзакционными запросами, такими как "BEGIN" и "COMMIT":

enter image description here

Итак, как я могу выполнить SELECT FOR UPDATE вместо SELECT при добавлении человека на Add person?

select_for_update() не работает с count():

                                         # Here                    # Here
obj_count = super().get_queryset(request).select_for_update().all().count()

Но, select_for_update() работает с len() как показано ниже:

# "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                           # Here
        obj_count = len(super().get_queryset(request).select_for_update().all())
        
        if obj_count < 2:
            obj.save()

        return super().response_add(request, obj, post_url_continue)

    def save_model(self, request, obj, form, change): # Here
        last_part_of_path = request.path.split('/')[-2]

        if last_part_of_path == "change":
            obj.save() # Here

Итак, при добавлении человека на Add person как показано ниже:

enter image description here

SELECT FOR UPDATE выполняется вместо SELECT, как показано ниже:

enter image description here

Вернуться на верх