使用Djnago管理员复制模型

时间:2019-03-13 23:02:32

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

对于特定模型,我使用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

2 个答案:

答案 0 :(得分: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 :(得分:-1)

  

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

这听起来像是我遇到的一个问题。确保未从clean函数中调用class CounselAdmin(admin.ModelAdmin): list_display = ('counsel_idx', 'show_firm_url', 'answer_count', 'counsel_status', 'deleted', 'register_date',) search_fields = ('counsel_status',) list_filter = ('counsel_status',) def show_firm_url(self, obj): return format_html("<a href='/admin/counsel/view/{0}'>{1}</a>", obj.counsel_idx, obj.counsel_title) show_firm_url.short_description = 'title'