簡體   English   中英

Django ModelAdmin保存數據庫字段

[英]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),以表明已發送電子郵件。 建議我使用信號來實現將要發送的電子郵件部分,但我需要先弄清楚如何更新模型。 任何幫助表示贊賞

這里有幾處錯誤。

  1. 除了您的類的save()方法之外,您不應該從任何其他方法調用super().save()
  2. 您發送電子郵件的解決方案(模型中的字段稍后將由接收者檢查)非常棘手。 如果可能,我會嘗試其他路線。 例如:

不要在ModelFormsave()不必要地弄亂模型。 實際上,將“已發送電子郵件”字段完全刪除。 在實際發送電子郵件的表單上編寫email()方法。 然后,只要您想發送電子郵件,就可以調用該方法。 如果您希望它自動發生,請覆蓋表單的save()和(在使用super()ModelForm做事之后) email()如果用戶已勾選send_email字段,則調用email()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM