使用Django admin创建重复的模型

3

对于一个特定的模型,我使用Django管理界面。我实现了自定义验证(clean方法)和保存方法。

所以,我的代码大概像这样:

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、Django 2和Postgres

2个回答

0

你必须显式地为更新阻止行。使用 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()

文档:


-1
在我的干净验证中,我实现了一个检查来避免类似的模型;有时会创建重复的模型。 这听起来像是我曾经遇到的问题。确保不要从您的clean函数中调用save()。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接