我试图在modelAdmin中使用modelForm来更改数据库字段。 IteAdmin是从mezzanine's blog admin
复制的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'正在被其他保存所覆盖?我对modeladmins来说是全新的,真的很挣扎。 基本上,如果选中复选框,我想发送电子邮件,然后更新模型(Ite),以便它显示已发送电子邮件。我建议我使用信号来实现我将要做的电子邮件部分,但我需要弄清楚如何首先更新模型。任何帮助都非常感激
答案 0 :(得分:0)
这里有一些问题。
super().save()
方法以外的任何方式致电save()
。在ModelForm
save()
中停止不必要地弄乱你的模特。事实上,请发送电子邮件'完全放弃了。在实际发送电子邮件的表单上写一个email()
方法。然后,只要您想发送电子邮件,就可以调用该方法。如果您希望它自动发生,请覆盖您的表单save()
和(使用super()
后让ModelForm
执行其操作)如果用户有email()
勾选send_email
字段。