【问题标题】:Duplicated models with Django admin使用 Django admin 复制模型
【发布时间】:2019-08-04 18:04:48
【问题描述】:

对于特定模型,我使用 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 admin 中管理?

我的一位客户向我报告了一个错误:

在我的干净验证中,我实施了一项检查以避免类似的模型; 有时他可以创建重复的模型。我认为他可能更多地点击保存按钮,并且可能他的互联网连接速度很慢。

这是一种可能的情况吗?我可以作废吗?例如,我可以在保存请求期间禁用保存按钮吗?

如果尚未管理,我能否以某种方式保证原子性?

PS:我使用 Python 3、Djnago 2 和 Postgres

【问题讨论】:

    标签: python django python-3.x transactions django-admin


    【解决方案1】:

    您必须明确阻止行进行更新。使用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()
    

    文档:

    【讨论】:

      【解决方案2】:

      在我的干净验证中,我实施了一项检查以避免类似情况 楷模;有时他可以创建重复的模型。

      这听起来像是我遇到的问题。确保没有从您的 clean 函数中调用 save()

      【讨论】:

        猜你喜欢
        • 2012-04-19
        • 2015-09-17
        • 1970-01-01
        • 2011-08-09
        • 2018-03-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-02
        相关资源
        最近更新 更多