[英]Django ModelAdmin saving database field
我正在嘗試在modelAdmin中使用modelForm更改數據庫字段。 IteAdmin是從夾層博客管理員復制的
class YourModelForm(forms.ModelForm):
send_email = forms.BooleanField(required=False)
def email(self, model, commit=True):
send_email = self.cleaned_data.get('send_email', None)
content = self.cleaned_data.get('content', None)
if send_email == True:
mod = Ite.objects.get(id=self.instance.id)
print mod.email_recipients #>'NOT SENT'
mod.email_recipients = 'EMAIL SENT'
mod.save() # this does nothing
print mod.email_recipients #> 'EMAIL SENT'
return super(YourModelForm, self).save(commit=commit)
class IteAdmin(TweetableAdminMixin, DisplayableAdmin, OwnableAdmin, admin.ModelAdmin):
form = YourModelForm
def save_form(self, request, forms, change):
OwnableAdmin.save_form(self, request, forms, change)
DisplayableAdmin.save_form(self, request, forms, change)
return YourModelForm.email(forms,self)
我認為'EMAIL SENT'的值被其他保存覆蓋嗎? 我是模型管理員的新手,確實很掙扎。 基本上,如果要選中此復選框,我想發送電子郵件,然后更新模型(Ite),以表明已發送電子郵件。 建議我使用信號來實現將要發送的電子郵件部分,但我需要先弄清楚如何更新模型。 任何幫助表示贊賞
這里有幾處錯誤。
save()
方法之外,您不應該從任何其他方法調用super().save()
。 不要在ModelForm
的save()
不必要地弄亂模型。 實際上,將“已發送電子郵件”字段完全刪除。 在實際發送電子郵件的表單上編寫email()
方法。 然后,只要您想發送電子郵件,就可以調用該方法。 如果您希望它自動發生,請覆蓋表單的save()
和(在使用super()
讓ModelForm
做事之后) email()
如果用戶已勾選send_email
字段,則調用email()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.