Дублированные модели с администратором Djnago - PullRequest
1 голос
/ 14 марта 2019

Для конкретной модели я использую интерфейс администратора Django.Я реализовал пользовательскую проверку (чистые методы) и метод сохранения.

Итак, у меня есть что-то вроде этого:

class DailyActivitiesAdmin(admin.ModelAdmin):
form= MyCustomFormForm

    def save_model(self, request, obj, form, change):
     .... my custom save ....

class MyCustomFormForm(forms.ModelForm):

    ....
    def clean(self):
      ... my custom validation ...

    def clean_my_field(self):
      ... my custom field validation ...

Мой вопрос:

Должен ли я управлять явнотранзакция от проверки для сохранения модели или атомарности уже управляется в администраторе Django?

А мой клиент сообщил мне об ошибке об этом:

В моей чистой проверке я реализовал проверку, чтобы избежать подобногомодели;Иногда он может создать дублированную модель.Я думаю, что, вероятно, он сделал больше, нажав на кнопку сохранения, и, вероятно, у него было медленное интернет-соединение.

Это возможный сценарий?Могу ли я аннулировать это?Например, можно ли отключить кнопки сохранения во время запросов на сохранение?

Можно ли каким-то образом гарантировать атомарность, если это еще не удалось сделать?

PS: я использую Python 3, Djnago 2 иPostgres

Ответы [ 2 ]

0 голосов
/ 14 марта 2019

В моей чистой проверке я реализовал проверку, чтобы избежать подобных моделей;Иногда он может создать дублированную модель.

Похоже, у меня возникла проблема.Убедитесь, что save() не вызывается из вашей clean функции.

0 голосов
/ 14 марта 2019

Вы должны явно заблокировать строки для обновлений.Используйте transaction.atomic() и select_for_update().Вот пример:

@transaction.atomic
def update_bank_account():
    # Another call to update_bank_account will block until the first one is finished
    account = BankAccount.objects.select_for_update().get(id=123)
    sleep(120)
    account.usd += 100
    account.save()

Документы:

...