你能用同样的方法重新保存一个 Django 对象吗

Can you resave a Django object in same method

我有一个 django 函数,我在同一个函数中保存对象两次。因为我需要我的 .delay (python celery) 函数中对象的 id。使用 .save() 两次是否可以,还是不好的做法:

def some_function(request, emailname, emailbody):
    email = Email()
    email.name = emailname
    email.save()

    email_id = email.id
    celery_task = send_email.delay(email_id, emailbody)
    
    email.celery_task_id = celery_task.id
    email.save()

使用这种方式是可以的,因为您需要将电子邮件 ID 存储到 celery 任务中,然后将 celery id 存储回电子邮件对象。

如果芹菜出现问题,您也可以重新发送电子邮件。

我的意见是把这个功能一分为二,分担责任。一个功能是创建电子邮件对象,另一个功能是发送电子邮件。这是必要的,因为有时您可能需要执行任何一项任务,例如仅发送电子邮件或仅创建电子邮件对象,此时您需要创建另一个函数或在此函数中放置一些 if..else

def some_function(request, emailname):
    email = Email()
    email.name = emailname
    email.save()

    return email.id
    
def send_email(email_id, emailbody):
    celery_task = send_email.delay(email_id, emailbody)
    
    email.celery_task_id = celery_task.id
    email.save()
    
    return email

创建 class 的理想方式,对象创建进入 init 并添加 class 方法 send_email 用于发送电子邮件