在 django Admin 中保存数据之前和之后做一些工作

Do Some work before Saving and After Saving data in django Admin

我有一个模型 class '时事通讯'。其中可以选择发送给喜欢的学生、老师等

我想获取学生或老师的所有电子邮件,无论用户 selected,然后在按下保存按钮后,获取当前保存的新闻通讯的 ID 和 selected 的所有电子邮件选择学生或老师并将其保存到另一个名为电子邮件日志的 table 中。

所有这些工作都是在 django 的管理面板上完成的。

class newsletter(models.Model):
    newsletter_id = models.AutoField(primary_key=True)
    subject = models.CharField(max_length=512)
    content = RichTextField()
    send_to_choice = {('0', 'None'), ('1', 'Student'), ('2', 'Teacher')}
    send_to = models.CharField(max_length=128, choices=send_to_choice, default='None')
    created_on = models.DateTimeField(auto_now_add=True)
    created_by = models.EmailField(max_length=254)
    updated_on = models.DateTimeField(auto_now_add=True)
    updated_by = models.EmailField(max_length=254)

当管理员 select 选择时,应激活查询并显示 selected 选择的所有电子邮件。我知道查询,但不知道如何在 Django 管理面板上实现它。

更新:

我写了这个简单的函数来测试如果它执行然后添加我的逻辑。

def save_model(self, request, obj, form, change):
    obj.save()
    if not change:
        if obj.send_to == '1':
            messages.success(request, 'MyModel was saved!.')
            obj.created_by = 'abc@gmail.com'
    if obj.send_to == '1':
            messages.success(request, 'MyModel was saved!.')
            obj.created_by = 'abc@gmail.com'
    obj.save()

您必须覆盖 ModelAdmin.save_model() 方法:

class NewsletterAdmin(admin.ModelAdmin):

    def save_model(self, request, obj, form, change):
        obj.save()
        if not change: # newly created newsletter
            if obj.send_to == '1':
                for student in Student.objects.all():
                    EmailLog.objects.create(student=student, newsletter=obj)
            elif obj.send_to == '2':
                for teacher in Teacher.objects.all():
                    EmailLog.objects.create(teacher=teacher, newsletter=obj)