Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django自动邮件_Python_Django - Fatal编程技术网

Python Django自动邮件

Python Django自动邮件,python,django,Python,Django,在过去的几天里,我一直在努力学习django,现在我已经制作了一个基本的bug跟踪软件(使用django的管理部分) 我创建了一个名为bugs的表: from django.db import models # Create your models here. class Bugs(models.Model): STATUS_CHOICE = ( ('Work In Progress', 'Work In Progress'), ('Incomple

在过去的几天里,我一直在努力学习django,现在我已经制作了一个基本的bug跟踪软件(使用django的管理部分) 我创建了一个名为bugs的表:

from django.db import models

# Create your models here.


class Bugs(models.Model):
    STATUS_CHOICE = (
        ('Work In Progress', 'Work In Progress'),
        ('Incomplete', 'Incomplete'),
        ('Completed', 'Completed')
    )
    Project_Name = models.CharField(max_length=100)
    Basic_Description = models.CharField(max_length=100)
    Detailed_Description = models.TextField(default='The Description, here.')
    Status = models.CharField(max_length=18, choices=STATUS_CHOICE)
    Assigned_to = models.CharField(max_length=100)
    Reported_by = models.CharField(max_length=50, blank=True, null=True)
    Reporters_Mail_ID = models.CharField(max_length=50, blank=True, null=True)
    Reported_Date = models.DateTimeField(null=True, blank=True)
    Created = models.DateTimeField(auto_now_add=True, null=True, blank=True)
    Updated = models.DateTimeField(auto_now=True, null=True, blank=True)
    Deadline_Date = models.DateTimeField(null=True, blank=True)
    image = models.FileField(null=True, blank=True)

    def __str__(self):
        return self.Project_Name + ' [' + self.Status + '] ' + self.Basic_Description + ' [' + self.Assigned_to + ']'

    class Meta:
        verbose_name_plural = "Bugs"
如何使选择项目名称时,分配给的
也会自动选择

我如何确保一旦将其分配给个人/状态被编辑/或由
超级用户
进行任何类型的编辑,邮件就会发送给被分配给的人,并且当
个人
进行编辑时,超级用户会收到一封邮件,说已经进行了编辑

没有那么重要,但是,我还想知道是否有办法确保超级用户将某些工作分配给某个管理员时,只有指定的管理员才能查看问题

更新:

这次让我试着更详细地描述一下

因此,我有两种类型的用户: 第一个是超级用户,他决定哪些bug应该放在列表中,同时还管理其他用户。 第二个是其他普通用户,由超级用户选择(用户只能编辑超级用户添加的帖子)

数据库有12列,其中
Project\u Name
Assigned\u To
为2列

我的问题是,

如何使超级用户在输入
项目名称
时,已填充
分配给

以此为例,

Project_Name: Project1 ---> Assigned_To: Person1
Project_Name: Project2 ---> Assigned_To: Person2
Project_Name: Project3 ---> Assigned_To: Person3
Project_Name: Project4 ---> Assigned_To: Person4
现在,如果超级用户确定错误在项目1中,并且项目1由人员1处理,那么我如何制作程序,以便在选择项目1时,人员1将在
分配给
列中自动选择


一旦超级用户选择了SAVE选项(与上面的情况相同)。当超级用户更新数据库时,如何让程序向Person1发送邮件?当用户1对数据库进行更改时,我如何让程序向超级用户发送邮件?

我不确定您的问题是什么,但据我所知,您首先需要为用户添加另一个字段,如下所示:

from django.contrib.auth import get_user_model
user = models.ForeignKey(get_user_model(), blank=True, null=True)

关于在保存或更新模型的对象时发送电子邮件,您应该覆盖模型的save()方法,并放入要执行的代码。

您可以使用django信号, 超级用户保存或编辑时。您可以编写代码来实现您想要的任何目标

from django.db.models.signals import post_save  

def send_email(sender, instance, created, **kwargs):
    # your code goes here...

post_save.connect(send_email, sender=Bugs)

ref:

好的,首先,通常的做法是对模型字段使用所有小写字母。Python有一个名为PEP8的样式指南,它记录了编写Python的所有最佳实践。因此,请看这里开始

现在,如果分配给
模型的
应该引用与模型相关的用户,那么您确实应该按照Milad所说的做&对
用户
模型使用
外键
,因为在对您的数据有意义的情况下使用关系有很多好处

如果您希望根据
项目名称自动填充分配给
项目,则必须使用javascript。您可能会在选择项目时发送一个AJAX请求,将项目值发送到后端。然后发回该项目的受让人,该受让人将在javascript中用于设置
assigned_to
字段的值

至于在模型发生更改时发送电子邮件,您应该使用python中的信号。例如,在对对象进行更改时被激发

from django.core.mail import send_mail
from django.db.models.signals import post_save
from django.dispatch import receiver

from bugs.models import Bugs


@receiver(post_save, sender=Bugs)
def bugs_post_save(sender, instance=None, created=None, update_fields=None, **kwargs):
    if created or 'assigned_to' in update_fields:
        # We have a new object or the assignee has changed
        send_mail(
            'Subject here',
            'Here is the message.',
            'from@example.com',
            ['to@example.com'],
            fail_silently=False,
        )
发送电子邮件的文档是

这样的接收器功能可以包含在您的型号下,也可以包含在特定的
signals.py
模块中,您可以将该模块导入。那会像这样

# bugs/apps.py

from django.apps import AppConfig

class BugsConfig(AppConfig):
    name = 'bugs'
    verbose_name = "Bugs"

    def ready(self):
        # importing signals
        import signals

嘿,我已经更新了帖子,请看一下,让我知道你的想法?你能详细解释一下“l”是什么意思吗?当模型的一个对象被保存或更新时,你应该重写模型的save()方法,并把你想要执行的代码放进去。我刚刚开始学习Django,所以我对它了解不多。你有两个选择:1)分配给应该有django用户模型的ForeignKey(已经解释过)2)为项目创建另一个模型,并添加与它相关的字段,如分配给