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